Saltar al contenido

Planes de SQL Server: diferencia entre Index Scan / Index Seek

Deseamos mostrarte la mejor solución que hemos encontrado en todo internet. Nosotros deseamos que te resulte de mucha utilidad y si puedes compartir cualquier detalle que nos pueda ayudar a mejorar hazlo libremente.

Solución:

Un escaneo de índice es donde el servidor SQL lee todo el índice en busca de coincidencias; el tiempo que lleva 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 esto): el tiempo necesario es solo proporcional a el número de registros coincidentes.

  • En general, una búsqueda de índice es preferible a una exploración de índice (cuando el número de registros coincidentes es proporcionalmente mucho menor que el número total de registros), ya que el tiempo necesario para realizar una búsqueda de índice es constante independientemente del número total de registros en su mesa.
  • Tenga en cuenta, sin embargo, que en ciertas situaciones, un escaneo de índice puede ser más rápido que una búsqueda de índice (a veces significativamente más rápido), generalmente cuando la tabla es muy pequeña o cuando un gran porcentaje de los registros coincide con el predicado.

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 a la memoria, luego lee ese objeto de arriba a abajo en busca de los registros que necesita.

Búsqueda de índice

Cuando SQL Server realiza una búsqueda, sabe en qué parte del índice van a estar los datos, por lo que carga el índice desde el disco, va directamente a la parte del índice que necesita y lee dónde 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 un escaneo?

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 un escaneo es cuando algunas de las columnas que está buscando no están incluidas en el índice que desea que use. La mayoría de las veces, esto hará que SQL Server recurra 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 o a la tabla misma para obtener estos valores.

Referencias

Para obtener información sobre las especificaciones de cada uno de estos operadores dentro de un plan de ejecución de SQL Server, consulte…

  • Escaneo de índice agrupado – Libros en línea

  • Búsqueda de índice agrupado – Libros
    En línea

Respuesta corta:

  • Escaneo de índice: toque todas las filas excepto ciertas columnas.

  • Búsqueda de índice: toque ciertas filas y ciertas columnas.

Si posees algún reparo o forma de aumentar nuestro artículo te mencionamos añadir una interpretación y con placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *