Estaba leyendo este uso-the-index-luke.com que explica en detalle cómo funcionan los índices. Una de las cosas que esta persona ha reiterado es que el orden de los índices es muy importante y para que la consulta sea rápida, las columnas de la cláusula where deben ser las mismas que en el índice. Hoy, estaba corroborando esta teoría y creé una tabla (id int, name nvarchar (100)) en SQL Server 2008. Inserté unas 5000 filas y creé un índice
create index abc on test (name, id )
y disparó la consulta
select ID, name
from test
where ID = 10
and name = '10'
Esperaba que un escaneo completo de la tabla fuera seguido por una selección en el plan de consulta, pero para mi sorpresa, la salida del plan fue un escaneo de índice seguido por select.
Entonces, mi pregunta es ¿el orden de las columnas en la cláusula Where es importante o SQL Server las reorganiza según la definición del índice?
Gracias !!
fuente
Respuestas:
No. El orden de las columnas en la
WHERE
cláusula no importa en absoluto.fuente
En primer lugar, la
DROP
declaración en la ventana de consulta claramente no se ejecutó, pero en aras de la explicación, trataré de abordar lo que solicitó.Piense en los índices como lo haría con una guía telefónica: las entradas se ordenan por apellido y luego por nombre. (Este es el orden de las claves de índice ).
Si le pido que encuentre todos los números de teléfono de personas con el apellido "Davis", pasaría a la página correspondiente y leería los números. (Esta es una búsqueda de índice ).
Si le pido que encuentre todos los números de teléfono de las personas con el primer nombre "Janice", tendría que mirar cada página para encontrarlos a todos. (Esta es una exploración de índice ).
Si le doy un nombre y un apellido, podrá encontrar esa entrada muy rápidamente, como en el primer ejemplo, porque es obvio que usaría el apellido para encontrar la página correcta, luego el nombre para Encuentra la entrada exacta. No importaría en qué orden le di la información, siempre y cuando le di un nombre y un apellido.
El optimizador de consultas de SQL Server funciona de la misma manera. Según el orden de las claves de índice, determina automáticamente la forma más eficiente de recuperar los datos que ha solicitado, independientemente del orden de las condiciones de la
WHERE
cláusula.fuente
El orden de las columnas en el índice importa, pero no en el orden de los valores agregados en la
where
cláusula.fuente