В современных средах SQL это поэтапный подход, при котором на определенном уровне рабочего процесса вы принимаете решение о том, хотите ли вы повторно использовать существующий скомпилированный блок или начать все этапы заново, если вы получите лучший план дляопределенная комбинация аргументов.
Я думаю, что это выигрыш между (пере) временем компиляции и временем выполнения (затем скомпилированного в исполняемый код) результата.В зависимости от сложности запроса, перекомпиляция с применением специфики данных аргументов во время выполнения может не стоить усилий, если время выполнения существующего кода уже мало из-за предсказуемого минимального потребления ресурсов (например, чтение двух строк и возврат).
С более высокой сложностью запросов и предполагаемым потреблением ресурсов (задействовано много огромных таблиц, выбор критического индекса, возможное сканирование таблиц), детализация вашей статистики вступает в игру.т. е. если у вас есть избирательность, выбросы, выборочный диапазон, средн.размеры полей, размеры физических карт и т. д. оптимизатор может прийти к совершенно разным выводам с разными наборами аргументов.
Расчет наилучшего плана для оператора 25-join с аргументами 10 ++ переменных может занять время иРесурсы.Если результат быстрее и эффективнее, чем универсальная версия, это стоит затраченных усилий.Тем более что данный набор аргументов может содержать изменения в игре, и запрос будет часто выполняться повторно.
Наконец, ваш пробег может варьироваться в зависимости от поставщика;)