Я немного растерялся. У меня есть два почти идентичных запроса:
select
top 301
*
from
view
where
columnA like '%val%'
and
columnB > '12/12/2019 00:00:00'
order by
columnC
и
select
*
from
view
where
columnA like '%val%'
and
columnB > '12/12/2019 00:00:00'
order by
columnC
Когда я запускаю эти два запроса, они отлично работают с указанной датой. Если я немного вернусь в историю, первый запрос фактически истечет время ожидания моего приложения, но второй запрос работает нормально.
Я выполнил некоторые попытки устранения неполадок, и кажется, что для истечения времени ожидания приложения должно быть следующее .
- top # должен быть включен
- упорядочить по должен быть на
columnC
columnB
должно быть достаточно далеко в прошлом.
Из-за того, как настроено мое приложение, настройка для запроса всегда будет включать эти три элемента, и я не могу переместить ни один из этих элементов в само представление, поэтому они всегда будут полной таблицей сканирует.
Я пытаюсь оптимизировать свое представление, но я просто не понимаю, как добавление top # к запросу приводит к истечению времени ожидания приложения. Мы будем благодарны за любую помощь в понимании того, как top влияет на производительность SQL.
Дополнительные примечания:
Я заметил, что добавление TOP немного меняет план выполнения. Самое большое различие, которое я вижу в этих двух, состоит в том, что без top план выполнения выполняет параллелизм практически во всех соединениях, и это не относится к запросу, содержащему top.