La regla de la izquierda -- Indices

04/02/2009 - 08:16 por Normanmp | Informe spam
La regla de la izquierda -> Sé que esto funciona para MYSQL tengo dudas si es
tambien valido para SQL server, por lo que megustaria que me lo confirmarais:

Supongamos un INDEX usuario (id, name, adress), y una cláusula SELECT ...
WHERE NAME = x. Este Select no aprovechará el índice. Tampoco lo haría un
SELECT ... WHERE ID =X AND ADRESS = Y. Cualquier consulta que incluya una
columna parte del index sin incluir además las columnas a su izquierda, no
usará el indice.

Por tanto en nuestro ejemplo solo sacarian provecho del indice las consultas
SELECT ... WHERE ID = x, o WHERE ID = X AND NAME = y o WHERE ID = x AND NAME
= y AND ADRESS = Z

Gracias
 

Leer las respuestas

#1 Carlos Sacristan
04/02/2009 - 08:48 | Informe spam
No, no hace falta que la consulta incluya todas las columnas. SQL Server
puede llegar a usar el índice en el segundo ejemplo que pones (SELECT ...
WHERE ID=X AND ADRESS=Y), aunque evidentemente sería más útil si incluyes la
segunda o directamente todas las columnas.

Digo puede que lo use porque depende de la selectividad de los valores que
contenga esa columna y del valor por el que filtres.

Puedes ver ese comportamiento si incluyes el plan de ejecución de la consulta.

Un saludo
-
www.navento.com
Servicios de Localización GPS


"Normanmp" wrote:

La regla de la izquierda -> Sé que esto funciona para MYSQL tengo dudas si es
tambien valido para SQL server, por lo que megustaria que me lo confirmarais:

Supongamos un INDEX usuario (id, name, adress), y una cláusula SELECT ...
WHERE NAME = x. Este Select no aprovechará el índice. Tampoco lo haría un
SELECT ... WHERE ID =X AND ADRESS = Y. Cualquier consulta que incluya una
columna parte del index sin incluir además las columnas a su izquierda, no
usará el indice.

Por tanto en nuestro ejemplo solo sacarian provecho del indice las consultas
SELECT ... WHERE ID = x, o WHERE ID = X AND NAME = y o WHERE ID = x AND NAME
= y AND ADRESS = Z

Gracias

Preguntas similares