orden de las columnas de índice no agrupado
-
16-10-2019 - |
Pregunta
Tengo un índice no agrupado (llamado NCIDX1
) en col1, col2
de una mesa. Incluí col3, col4, col5, col6
como columnas incluidas en este orden.
Si funciono con la siguiente consulta:
select
col1,col2
from
tbl1
where
col3 = something
and
col4 = something
and
col5 = something
No es de diferente que el funcionamiento:
select
col3,col2 ,col4
from
tbl1
where
col1 = something
and
col5 = something
Lo que estoy tratando de decir es, cuando creamos un índice que cubre al igual que el anterior, y cambiamos el orden en el que estamos accediendo a los datos, será todavía tomar ventaja de este índice que cubre?
Además, el orden de las columnas de igualdad (entre sí) y columnas (no de igualdad entre ellos mismos) ... qué importa? Al igual que where equalitycol2='' and equalitycol1=''
.
Solución
Generalmente, un índice debe estar en
(equalitycol1, equalitycol2, ..., nonequalitycol1, , nonequalitycol2, ...)
INCLUDE
(outputonlycol1, outputonlycol2, ...)
Simplemente (ignorando los rangos) se descompone en esta ??p>
- equalitycol:
WHERE equalitycol = something
. Más selectivas primero. Sargable. Busca. - nonequalitycol:
WHERE nonequalitycol <> something
. filtros residuales - outputonlycol:
SELECT outputonlycol
. Sin filtrar o pedidos
ORDER BY
y GROUP BY
columnas será la igualdad o no igualdad columnas.
En este caso ...
Consulta 1 no coincide con el índice en absoluto, en realidad, lo que muy probablemente no va a usar el índice. Sin embargo, el optimizador pueden decidir que es más barato utilizar el índice a continuación, utilizar otro acceso a la tabla como un recorrido de tabla o una búsqueda / RID marcador.
Para consulta 2, el optimizador puede decidir utilizar el índice debido a col1
sería un partido de la igualdad. Y luego usar el col5
sin clasificar del INCLUDE
. Tu caso es distinto, pero hay una posibilidad más alta.
Para el fin de la cláusula WHERE
, no: el optimizador funciona hacia fuera. Dos índices (col1, col2)
y (col2, col1)
son diferentes sin embargo. Nota (col1, col2)
será contenida por (col1, col2, col3, col4)
pesar de lo que la primera no es necesario.