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=''.

¿Fue útil?

Solución

Generalmente, un índice debe estar en

(equalitycol1, equalitycol2, ..., nonequalitycol1, , nonequalitycol2, ...)
INCLUDE
(outputonlycol1, outputonlycol2, ...)

Simplemente (ignorando los rangos) se descompone en esta

  • 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top