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?

¿Fue útil?

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?

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