¿El orden de la columna en la cláusula where debe ser el mismo que el orden del índice?

8

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. Plan de consulta

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 !!

Igualitario
fuente
3
¿El plan de ejecución de su prueba no responde la pregunta?
ypercubeᵀᴹ
Si !! Pero quería una opinión experta y en casos esto puede fallar. Gracias !!
Igualitario
1
Pregunta similar para MySQL: en MySQL, ¿el orden de las columnas en una cláusula WHERE afecta el rendimiento de la consulta? El optimizador de SQL-Server es unos niveles más alto que el de MySQL.
ypercubeᵀᴹ

Respuestas:

13

Entonces, mi pregunta es si el orden de las columnas en la cláusula Where es importante

No. El orden de las columnas en la WHEREcláusula no importa en absoluto.

un caballo sin nombre
fuente
10

En primer lugar, la DROPdeclaració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 WHEREcláusula.

Jon Seigel
fuente
Gran explicación sobre el escaneo de índice y la búsqueda de índice.
Neelam
0

El orden de las columnas en el índice importa, pero no en el orden de los valores agregados en la wherecláusula.

Gaston Sanchez
fuente