Мы знаем, что структура памятки сокращена, а некоторые дорогие альтернативные планы отбрасываются при оптимизации. Мне было интересно, есть ли способ предотвратить это и позволить оптимизатору просто рассмотреть каждый возможный план и выбрать лучший из всех альтернатив?
Есть, но я не публикую это, потому что это будет неправильно понято и неправильно использовано. В любом случае это не приведет к исчерпывающему поиску пространства плана, потому что реализован только ограниченный набор преобразований (которые обычно дают хорошие результаты).
Предотвращение обрезки и удаления обычно приводит к (намного) более длительному времени компиляции без значительного улучшения качества окончательного плана, если таковое имеется.
В конечном счете, этот вопрос является естественным и разумным, но он основан на неправильном понимании целей оптимизатора запросов SQL Server: он предназначен для быстрого поиска хороших планов для распространенных запросов. Он не построен на основе, предназначенной для исчерпывающего поиска.
Если вы столкнулись с реальной ситуацией, которая выиграла бы от другого подхода к оптимизации, вы могли бы обосновать это на веб-сайте Connect (хотя я думаю, что вряд ли Microsoft вложит необходимые инженерные ресурсы).