Un índice ayuda a SQL Server a recuperar datos de filas rápidamente. Los índices funcionan como la tabla de contenido al comienzo de los libros, lo que le permite buscar rápidamente la página en la que se encuentra un tema. Sin índices, SQL Server tiene que escanear todas las filas de una tabla para encontrar un registro.
Hay dos tipos de índices en SQL Server: agrupados y no agrupados. Descubra la diferencia entre índices agrupados y no agrupados y por qué son importantes.
Índice agrupado en SQL Server
En un índice agrupado, las filas de datos se almacenan físicamente de manera ordenada según el valor de la clave. Dado que el índice incluye la tabla y solo puede organizar filas en un orden, solo puede crear un índice agrupado por tabla.
Mientras que los índices hacen que la recuperación de filas en un rango sea más rápida, las declaraciones INSERT y UPDATE pueden ser lentas porque el optimizador de consultas escanea el índice en orden hasta que encuentra el índice de destino.
Índice no agrupado en SQL Server
Un índice no agrupado contiene los valores clave cuya entrada es un puntero denominado localizador de filas. Para las tablas agrupadas (tablas con un índice agrupado), el puntero apunta a una clave en el índice agrupado que, a su vez, apunta a la fila de la tabla. Para las filas sin un índice agrupado, el puntero apunta directamente a la fila de la tabla.
Cómo crear un índice agrupado en SQL Server
Cuando crea una tabla con una clave principal, SQL Server crea automáticamente una clave de índice agrupado basada en esa clave principal. Si no tiene una clave principal, puede ejecutar la siguiente instrucción para crear una clave de índice agrupado.
CREATE CLUSTERED INDEX <index name>
ON TABLE <table_name>(column_name)
En esta declaración, está especificando el nombre del índice, el nombre de la tabla para crearlo y el nombre de la columna para usar en el índice.
Si agrega una clave principal a una tabla que ya tiene un índice agrupado, SQL Server creará un índice no agrupado con ella.
Para crear un índice agrupado que no incluya la columna de clave principal, primero debe descartar la restricción de clave principal.
USE database_name
ALTER TABLE table_name
DROP CONSTRAINT pk_name
GO
Al eliminar las restricciones de la clave principal, también se elimina el índice agrupado, lo que le permite crear uno personalizado.
Cómo crear un índice no agrupado en SQL Server
Para crear un índice no agrupado, use la siguiente instrucción.
CREATE INDEX <index name>
ON TABLE <table_name>(column_name)
También puede usar la palabra clave NONCLUSTERED de esta manera:
CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name)
Esta declaración crea un índice no agrupado en la tabla que especifique e incluye la columna que indique.
Si lo desea, puede ordenar las columnas en orden ascendente (ASC) o descendente (DESC)
CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name ASC/DESC)
¿Qué índice debería elegir?
Tanto los índices agrupados como los no agrupados mejoran el tiempo de consulta. Si la mayoría de sus consultas son operaciones SELECT en varias columnas de la tabla, los índices agrupados son más rápidos. Sin embargo, para las operaciones INSERT o UPDATE, los índices no agrupados son más rápidos, ya que el optimizador de consultas puede ubicar la columna directamente desde el índice.
Como puede ver, estos índices funcionan mejor para diferentes consultas SQL . Por lo tanto, la mayoría de las bases de datos SQL se beneficiarán de tener al menos un índice agrupado e índices no agrupados para las columnas que se actualizan regularmente.
La importancia de los índices en SQL Server
Los índices agrupados y no agrupados conducen a un mayor rendimiento de las consultas. Cuando ejecuta una consulta, el optimizador de consultas escanea el índice en busca de la ubicación de almacenamiento de una fila y luego recupera información de esa ubicación. Esto es mucho más rápido que escanear todas las filas de la tabla.
También puede usar índices no agrupados para resolver los puntos muertos de búsqueda de marcadores mediante la creación de un índice no agrupado para las columnas a las que acceden las consultas.