Si si usted:
- están ejecutando SQL Server 2014 o posterior; y
- son capaces de ejecutar la consulta con el marcador de rastreo 176 activo; y
- la columna calculada es
PERSISTED
Específicamente, se requieren al menos las siguientes versiones :
- Actualización acumulativa 2 para SQL Server 2016 SP1
- Actualización acumulativa 4 para SQL Server 2016 RTM
- Actualización acumulativa 6 para SQL Server 2014 SP2
PERO para evitar un error (referencia para 2014 y para 2016 y 2017 ) introducido en esas correcciones, aplique en su lugar:
La marca de seguimiento es efectiva como una –T
opción de inicio , tanto en el ámbito global como en el de sesión DBCC TRACEON
, y por consulta con OPTION (QUERYTRACEON)
una guía de plan.
La marca de seguimiento 176 evita la expansión persistente de la columna calculada.
La carga inicial de metadatos realizada al compilar una consulta trae todas las columnas, no solo aquellas directamente referenciadas. Esto hace que todas las definiciones de columnas calculadas estén disponibles para la coincidencia, lo que generalmente es algo bueno.
Como un efecto secundario desafortunado, si una de las columnas cargadas (calculadas) usa una función escalar definida por el usuario, su presencia deshabilita el paralelismo para toda la consulta, incluso cuando la columna calculada no se usa realmente .
La marca de seguimiento 176 ayuda con esto, si la columna persiste, al no cargar la definición (ya que se omite la expansión). De esta manera, una función escalar definida por el usuario nunca está presente en el árbol de consulta de compilación, por lo que el paralelismo no está deshabilitado.
El principal inconveniente del indicador de traza 176 (aparte de estar solo ligeramente documentado) es que también evita que la expresión de consulta coincida con columnas calculadas persistentes: si la consulta contiene una expresión que coincide con una columna calculada persistente, el indicador de seguimiento 176 evitará que la expresión sea reemplazada por Una referencia a la columna calculada.
Para obtener más detalles, consulte mi artículo de SQLPerformance.com, Columnas calculadas correctamente persistentes .
Dado que la pregunta menciona XML, como una alternativa a la promoción de valores utilizando una columna calculada y una función escalar, también puede considerar el uso de un índice selectivo de XML, como lo escribió en los índices selectivos de XML: no está nada mal .