Un índice ayuda a SQL Server a recuperar rápidamente los datos de las filas. Los índices funcionan como la tabla de contenido al principio de los libros, lo que le permite buscar rápidamente en qué página 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. Conozca 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 abarca la tabla y solo puede organizar las 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 llamado buscador 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.
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 declaración para crear una clave de índice agrupado.
CREATE CLUSTERED INDEX <index name>
ON TABLE <table_name>(column_name)
En esta instrucción, especifica el nombre del índice, el nombre de la tabla en la que crearlo y el nombre de la columna que se usará en el índice.
Si agrega una clave principal a una tabla que ya tiene un índice agrupado, SQL Server crea un índice no agrupado con ella.
Para crear un índice agrupado que no contenga una columna de clave principal, primero debe eliminar 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 un índice personalizado.
Crear un índice no agrupado en SQL Server
Utilice la siguiente declaración para crear un índice no agrupado.
CREATE INDEX <index name>
ON TABLE <table_name>(column_name)
También puede usar la palabra clave NONCLUSTERED de la siguiente manera:
CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name)
Esta instrucción crea un índice no agrupado en la tabla que especifique y contiene la columna que especifique.
Si lo prefiere, 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 búsqueda. Si la mayoría de sus consultas son operaciones SELECT en diferentes 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 porque 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 al menos un índice agrupado e índices no agrupados para las columnas que se actualizan periódicamente.
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 en las columnas a las que accedieron las consultas.