НЕТ, и по уважительной причине.
, когда вы пишете процедуру с запросом:
select FieldA, FieldB, FieldC, FieldD ...
оптимизатор смотрит на кучу вещей, чтобы построить план запроса, которыйвключает столбцы, которые вы возвращаете.Если столбцы изменятся:
select FieldA, FieldC ....
план запроса также может измениться.Если ВСЕ возвращаемые столбцы находятся в индексе, тогда запрос фактически не попадает в таблицу (см. Охватывающий индекс).Другими элементами, влияющими на план запроса, являются доступные индексы, статистика, хранящаяся в таблице и индексе, а также какие и как вы фильтруете (где и объединять) в запросе.Добавьте туда OR
, и вы можете иногда убить производительность.
Цель с SQL состоит в том, чтобы написать его так, чтобы он работал быстро, а не так, чтобы он не был избыточным и / или легким в обслуживании из кода кодера.перспектива.Вы можете легко и радикально изменить эффективность запроса, сделав тривиальные изменения.Такие вещи, как while x=1 begin... end
, легко и предсказуемо переводятся в машинный код.Однако многие оптимизации, используемые при преобразовании select x from ... join .. join..
, трудно предсказать даже для опытных разработчиков.эти оптимизации могут даже меняться при изменении данных.
, если вы действительно хотите что-то подобное, вам нужно сделать следующее:
1) написать свои процедуры так:
select
FieldA,
FieldB--||DEBUG||--,
--||DEBUG||--FieldC,
--||DEBUG||--FieldD
2) работать со всеми вашими процедурами в виде текстовых файлов (не только с объектами процедур в SSMS)
3) использовать утилиту поиска и замены, чтобы включить либо --||DEBUG||--
комментарий (помните что-нибудь в той же строке после --
закомментировано) или замените его пустой строкой.
4) затем можно запустить сценарии процедуры с отладочной информацией или без нее.