Un índice es una estructura de datos definida sobre una columna de tabla (o varias) y que permite localizar de forma rápida las filas de la tabla en base a su contenido en la columna indexada además de permitir recuperar las filas de la tabla ordenadas por esa misma columna.
Los índices funcionan igual que un Libro, veamos, si queremos buscar un tema especifico tenemos 3 Opciones:
La primera consiste un ir pagina por pagina buscando la información hasta encontrar el tema que requerimos; esto nos tomara mucho tiempo y esfuerzo.
La Segunda nos vamos al Indice del Libro y buscamos lo que necesitamos, eso nos dará el numero físico exacto del pagina del tema que buscamos nos dirigimos a él y la búsqueda seria rápida, a esto lo llamamos índices Clustered, serian por defecto las llaves primarias (Primary key).
La tercera opción siempre en el ejemplo del libro, seria nos vamos al Glosario y ahí encontraremos un conjunto de paginas donde buscar información sobre el tema a investigar, a esto lo llamamos índices NON-Clustered.
Entonces una definición más ortodoxa seria:
Los Clustered Indexes son índices que controlan el orden físico de las filas en la tabla, por lo cual solo puede existir uno para cada tabla.
Los Non-Clustered indexes son índices que mantienen un sub conjunto de las columnas de la tabla en orden. Estos índices no modifican el orden de las filas de la tabla, en lugar de esto mantienen una lista ordenada de referencias a filas de la tabla original.
Ventajas
La utilización de índices puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio índice. Es decir, sólo se necesitan las páginas de índice y no las páginas de datos de la tabla o el índice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global en el disco. Por ejemplo, una consulta de las columnas a y b de una tabla que dispone de un índice compuesto creado en las columnas a, b y c puede recuperar los datos especificados del propio índice.
Los índices en vistas pueden mejorar de forma significativa el rendimiento si la vista contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y combinaciones.
Inconvenientes
Las tablas utilizadas para almacenar los índices ocupan espacio.
Los índices consumen recursos ya que cada vez que se realiza una operación de actualización, inserción o borrado en la tabla indexada, se tienen que actualizar todas las tablas de índice definidas sobre ella (en la actualización sólo es necesaria la actualización de los índices definidos sobre las columnas que se actualizan
Los índices consumen recursos ya que cada vez que se realiza una operación de actualización, inserción o borrado en la tabla indexada, se tienen que actualizar todas las tablas de índice definidas sobre ella (en la actualización sólo es necesaria la actualización de los índices definidos sobre las columnas que se actualizan
Recomendaciones para crear indices
Las columnas que se aconseja indexar son:
- Las que son clave primaria o ajena
- Aquellas que se usan frecuentemente en búsquedas de rangos de valores con BETWEEN
- Aquellas que se usan frecuentemente en ordenaciones con ORDER BY
- Aquellas que se usan frecuentemente en cruces de tabla o JOIN
- Aquellas que se usan frecuentemente en agrupaciones con GROUP BY
Procedimientos Importantes
EXEC sp_helpindex Customers
Mostrara los índices que contiene una tabla, en el ejemplo Customers de la base Northwind
SET STATISTICS IO ON
Habilitara la estadísticas de Lecturas Logicas utilizados en cada consulta:
Por ejemplo:
(12 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Facturas'. Scan count 1, logical reads 835, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Clientes'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
No hay comentarios:
Publicar un comentario