Я знаю, что не должен превращать это в «дискуссию», но я очень заинтересован в этом и просто подумал, что поделюсь своими эмпирическими наблюдениями за конкретной ситуацией, с особой ссылкой на все комментарии выше в котором указывается, что эквивалентный оператор SELECT, выполняемый из хранимой процедуры и представления, должен в целом иметь одинаковую производительность.
У меня есть представление в базе данных "A", которое объединяет 5 таблиц в отдельную базу данных (db "B"). Если я присоединяюсь к базе данных «A» в SSMS и SELECT * из представления, это возвращает> 3 минуты, чтобы вернуть 250000 строк. Если я возьму оператор выбора со страницы дизайна представления и выполню его непосредственно в SSMS, это займет <25 секунд. Помещение того же оператора select в хранимую процедуру дает ту же производительность, когда я выполняю эту процедуру. </p>
Не делая каких-либо наблюдений за абсолютной производительностью (db "B" является базой данных AX, к которой мы не имеем права прикасаться!), Я все еще абсолютно уверен, что в этом случае использование SP на порядок быстрее, чем использование представление для извлечения тех же данных, и это применимо ко многим другим подобным представлениям в данном конкретном случае.
Я не думаю, это как-то связано с созданием соединения с другим БД, если только с помощью представления он каким-то образом никогда не сможет кэшировать соединение, тогда как выбор делает, потому что я могу переключаться 2 выбирает в одном и том же окне SSMS несколько раз, и производительность каждого запроса остается неизменной. Кроме того, если я подключаюсь напрямую к базе данных db "B" и запускаю команду select без ссылки dbname.dbo ...., это занимает то же время.
Есть мысли у кого-нибудь?