Да, если вы:
- работают на SQL Server 2014 или более поздней версии; а также
- умеют выполнять запрос с активным флагом трассировки 176 ; а также
- вычисляемый столбец
PERSISTED
В частности, требуются как минимум следующие версии :
- Накопительное обновление 2 для SQL Server 2016 SP1
- Накопительное обновление 4 для SQL Server 2016 RTM
- Накопительное обновление 6 для SQL Server 2014 с пакетом обновления 2
НО, чтобы избежать ошибки (ссылка на 2014 , а также на 2016 и 2017 ), внесенной в эти исправления, вместо этого примените:
Флаг трассировки действует как –T
опция запуска , как в глобальной области DBCC TRACEON
, так и в области сеанса с использованием , а также для каждого запроса OPTION (QUERYTRACEON)
или руководства плана.
Флаг трассировки 176 предотвращает расширение сохраняемого вычисляемого столбца.
Начальная загрузка метаданных, выполняемая при компиляции запроса, включает все столбцы, а не только те, на которые есть прямые ссылки. Это делает все вычисленные определения столбцов доступными для сопоставления, что, как правило, хорошо.
К сожалению, если один из загруженных (вычисляемых) столбцов использует скалярную пользовательскую функцию, его присутствие отключает параллелизм для всего запроса, даже если вычисляемый столбец фактически не используется .
Флаг трассировки 176 помогает в этом, если столбец сохраняется, не загружая определение (поскольку расширение пропускается). Таким образом, скалярная пользовательская функция никогда не присутствует в дереве запросов компиляции, поэтому параллелизм не отключается.
Основной недостаток флага трассировки 176 (помимо того, что он только слегка документирован) заключается в том, что он также предотвращает сопоставление выражения запроса с сохраняемыми вычисляемыми столбцами: если запрос содержит выражение, совпадающее с сохраняемым вычисляемым столбцом, флаг трассировки 176 будет препятствовать замене выражения на ссылка на вычисляемый столбец.
Дополнительные сведения см. В моей статье на SQLPerformance.com « Правильно сохраненные вычисляемые столбцы» .
Поскольку в вопросе упоминается XML, в качестве альтернативы продвижению значений с использованием вычисляемого столбца и скалярной функции, вы также можете взглянуть на использование выборочного индекса XML, как вы писали в разделе «Выборочные индексы XML: совсем неплохо» .