Velocidad de consulta de índice agrupado de SQL Server 2005
-
05-07-2019 - |
Pregunta
Nuestros sitios están siendo muy afectados, por lo que estamos analizando la optimización de algunas de nuestras consultas existentes.
Al analizar esto, encontramos varias consultas cuyo plan de ejecución fue de 4 a 5 veces más rápido cuando una referencia simple del índice agrupado está en la consulta ... por ejemplo
Si esta era la consulta anterior:
SELECT ...
FROM myTable
WHERE categoryID = @category
la siguiente consulta sería 4 veces más rápida según el plan de ejecución en SSMS:
SELECT ...
FROM myTable
WHERE categoryID = @category
AND lotID = lotID
Parece que no podemos entender cómo esto haría que la consulta fuera más rápida. El índice agrupado está en lotID, pero dado que está haciendo una comparación contra sí mismo, ¿cómo está ayudando esto?
Solución
me parece bastante obvio
su primera consulta no está cubierta por el índice agrupado, mientras que la segunda es porque lotID no está en la cláusula WHERE de la primera consulta
Es posible que desee leer índices de cobertura del Servidor SQL para ver cómo funciona todo eso
también debe comprender que un índice agrupado ES los datos, todos los datos de una tabla se encuentran en el índice agrupado. cuando crea un índice no agrupado en una tabla que tiene un índice agrupado, entonces el índice no agrupado tendrá un puntero al índice agrupado (ya que es donde está el resto de los datos) a menos que pueda satisfacer su consulta completamente por el no agrupado índice y, en ese caso, solo se utilizará el índice no agrupado ... Dejaré de divagar ahora
EDITAR
Leí AND lotID = @lotID NOT AND lotID = lotID
a veces puede falsificar un índice agrupado haciendo donde lotID > 0 (eligiendo el número más bajo que tenga) y obtendrá una búsqueda
Entonces, si tu lotID más pequeño = 1 y agregas Y lotID > 0
También puede ver una búsqueda en lugar de una exploración. Demuestro DÓNDE IndexValue > '' en esta publicación ¿Una búsqueda de índice siempre es mejor o más rápida que una exploración de índice?