En un plan de ejecución de SQL Server, ¿cuál es la diferencia entre una exploración de índice y una búsqueda de índice?
Estoy en SQL Server 2005.
Respuestas:
Un escaneo de índice es donde el servidor SQL lee todo el índice en busca de coincidencias; el tiempo que toma es proporcional al tamaño del índice.
Una búsqueda de índice es donde el servidor SQL utiliza la estructura de árbol b del índice para buscar directamente los registros coincidentes (consulte http://mattfleming.com/node/192 para obtener una idea de cómo funciona); el tiempo que se toma es solo proporcional a el número de registros coincidentes.
La regla básica a seguir es que los escaneos son malos, las búsquedas son buenas.
Escaneo de índice
Cuando SQL Server realiza un escaneo, carga el objeto que desea leer del disco en la memoria, luego lee ese objeto de arriba a abajo en busca de los registros que necesita.
Búsqueda de índice
Cuando SQL Server hace una búsqueda, sabe en qué parte del índice estarán los datos, por lo que carga el índice desde el disco, va directamente a la parte del índice que necesita y lee hasta donde terminan los datos que necesita. . Obviamente, esta es una operación mucho más eficiente que un escaneo, ya que SQL ya sabe dónde se encuentran los datos que está buscando.
¿Cómo puedo modificar un plan de ejecución para usar una búsqueda en lugar de una exploración?
Cuando SQL Server está buscando sus datos, probablemente una de las cosas más importantes que harán que SQL Server cambie de una búsqueda a una exploración es cuando algunas de las columnas que está buscando no están incluidas en el índice que desea utilizar. La mayoría de las veces, esto hará que SQL Server vuelva a realizar un análisis de índice agrupado, ya que el índice agrupado contiene todas las columnas de la tabla. Esta es una de las principales razones (al menos en mi opinión) por las que ahora tenemos la capacidad de INCLUIR columnas en un índice, sin agregar esas columnas a las columnas indexadas del índice. Al incluir las columnas adicionales en el índice, aumentamos el tamaño del índice, pero permitimos que SQL Server lea el índice, sin tener que volver al índice agrupado ni a la tabla para obtener estos valores.
Referencias
Para obtener información sobre los detalles de cada uno de estos operadores dentro de un plan de ejecución de SQL Server, consulte ....
Respuesta corta:
Escaneo de índice: toque todas las filas excepto ciertas columnas.
Búsqueda de índice: toque determinadas filas y determinadas columnas.
Con un escaneo de índice, todas las filas del índice se escanean para encontrar una fila coincidente. Esto puede resultar eficaz para mesas pequeñas. Con una búsqueda de índice, solo necesita tocar las filas que realmente cumplen con los criterios y, por lo tanto, generalmente tiene un mejor rendimiento.
Una exploración de índice ocurre cuando la definición de índice no puede encontrar en una sola fila para satisfacer los predicados de búsqueda. En este caso, SQL Server tiene que escanear varias páginas para encontrar un rango de filas que satisfaga los predicados de búsqueda.
En el caso de una búsqueda de índice, SQL Server encuentra una única fila que coincida con los predicados de búsqueda utilizando la definición de índice .
Las búsquedas de índice son mejores y más efectivas.
Un escaneo toca todas las filas de la tabla, incluso si es lo que busca o no
Una búsqueda mira solo las filas que son lo que está buscando.
Siempre es mejor tener búsquedas que escaneos, ya que son más eficientes en la forma en que busca datos.
Puede encontrar una buena explicación aquí.