Cómo crear un índice en SQL Server (clustered vs nonclustered)
Los indices aceleran las consultas, pero cada uno tiene un costo en escrituras y espacio. Aqui la diferencia entre clustered y nonclustered y como crearlos.
- 1
Entiende clustered vs nonclustered
El clustered define el orden fisico de la tabla: solo puede haber uno, normalmente la llave primaria. El nonclustered es una estructura aparte que apunta a las filas: puedes tener varios.
-- Un indice clustered por tabla (suele ser la PK) CREATE CLUSTERED INDEX IX_Ventas_Fecha ON dbo.Ventas (Fecha); - 2
Crea un indice nonclustered para tus consultas
Indexa las columnas que aparecen en el WHERE y en los JOIN. El orden de las columnas importa: la mas selectiva o la del filtro de igualdad primero.
CREATE NONCLUSTERED INDEX IX_Ventas_Cliente_Fecha ON dbo.Ventas (ClienteID, Fecha); - 3
Usa columnas incluidas (INCLUDE) para cubrir la consulta
INCLUDE agrega columnas al nivel hoja del indice sin ordenarlas, para que la consulta se resuelva sin ir a la tabla (indice cubridor).
CREATE NONCLUSTERED INDEX IX_Ventas_Cliente_Cubridor ON dbo.Ventas (ClienteID) INCLUDE (Total, Estatus); - 4
Revisa si el indice se usa
Un indice que nadie usa solo pesa en las escrituras. Consulta las estadisticas de uso antes de dejarlo permanente.
SELECT OBJECT_NAME(s.object_id) AS tabla, i.name AS indice, s.user_seeks, s.user_scans, s.user_updates FROM sys.dm_db_index_usage_stats s JOIN sys.indexes i ON s.object_id = i.object_id AND s.index_id = i.index_id WHERE s.database_id = DB_ID();
// el error común
Mas indices no siempre es mejor. Cada indice hace mas lentos los INSERT, UPDATE y DELETE, y ocupa espacio. Evita indices duplicados o casi identicos. Crear indices en tablas grandes bloquea: usa WITH (ONLINE = ON) en Enterprise para no interrumpir la operacion.
// cuándo conviene un experto
Diseñar el conjunto correcto de indices requiere analizar tus consultas reales y sus planes. En dba.mx hacemos tuning de indices con evidencia (no adivinando), para que rindan sin inflar las escrituras. Techo cerrado.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.