Учитывая, что оптимизатор не может занимать все необходимое время (он должен минимизировать время выполнения и не вносить в него свой вклад), чтобы изучить все возможные планы выполнения, которые он иногда отключает.
Мне было интересно, если это можно переопределить, чтобы вы могли дать оптимизатору все время в потребностях (или определенное количество миллисекунд).
Мне это не нужно (атм), но я могу представить сценарий, когда сложный запрос выполняется в тесном цикле, и вы хотите придумать оптимальный план и кэшировать его заранее.
Конечно, если у вас сложный цикл, вы должны переписать запрос, чтобы он ушел, но потерпите меня.
Это скорее вопрос из любопытства, а также из-за того, что иногда есть разница между короткозамкнутой оптимизацией и полной.
Оказывается, вы можете дать оптимизатору больше времени с помощью флага трассировки 2301. Это не совсем то, о чем я спрашивал, но это близко.
Лучшая информация, которую я нашел по этому вопросу, - это « Расширения моделирования процессора запросов» в SQL Server 2005 с пакетом обновления 1 ( I1) Иэна Хосе.
Используйте этот флаг трассировки с осторожностью! Но это может быть полезно, если придумать лучшие планы. Смотрите также:
- Статьи с тегом «уровень оптимизации» Гранта Фричи.
- Перед обновлением до SQL Server 2008… Брент Озар.
- Параметры настройки для SQL Server при работе в высокопроизводительных рабочих нагрузках службы поддержки Microsoft.
Я думал о запросах с большим количеством объединений, в которых пространство решения для порядка объединения растет в геометрической прогрессии. Эвристика, которую использует SQL Server, довольно хороша, но мне было интересно, предложит ли оптимизатор другой порядок, если у него будет больше времени (в диапазоне секунд или даже минут).