З огляду на те, що оптимізатор не може зайняти весь час, який йому потрібен (він повинен мінімізувати час виконання та не сприяти цьому) для вивчення всіх можливих планів виконання, він іноді може бути відрізаний.
Мені було цікаво, чи можна це відмінити, щоб ви могли давати оптимізатору весь час потреби (або певну кількість мілісекунд).
У мене немає потреби в цьому (атм), але я можу уявити сценарій, коли складний запит виконується в тісному циклі, і ви хочете скласти оптимальний план і кешувати його перед рукою.
Звичайно, у вас є щільна петля, вам слід переписати запит, щоб він пройшов, але потерпіть мене.
Це більше питання з цікавості, а також перевірити, чи є іноді різниця між оптимізацією короткого замикання та повною.
Виявляється, ви можете приділити оптимізатору більше часу з прапором слідів 2301. Це не зовсім те, що я просив, але він наближається.
Найкраща інформація, яку я знайшла з цього приводу, - це розширення моделювання запитів процесорів у SQL Server 2005 SP1 Ian Jose.
Використовуйте цей слід прапор обережно! Але це може бути корисно, коли придумують кращі плани. Дивись також:
- Статті з позначкою "рівень оптимізації" Гранта Фрітчея.
- Перед оновленням до SQL Server 2008… Brent Ozar.
- Параметри налаштування для SQL Server під час роботи у високопродуктивних робочих навантаженнях від служби підтримки Microsoft.
Я думав про запити з великою кількістю приєднань, де простір рішення для порядку приєднання вибухає експоненціально. Евристика, яку використовує SQL Server, досить хороша, але мені було цікаво, чи оптимізатор запропонує інший порядок, якби у нього було більше часу (в діапазоні секунд чи навіть хвилин).