Indices en Microsoft SQL Server
Supón que buscamos en un libro de Química el tema de los «Metales Alcalinos», lo primero que tendríamos que hacer es recurrir al índice para localizar en que página se encuentra la información que necesitamos, de similar forma SQL crea índices en las tablas para realizar búsquedas de forma mas eficiente en este video tutorial te muestro como crear índices en una tabla de Microsoft SQL Server.
Índices Agrupados (Clustered Indexes)
Un índice agrupado determina el orden físico de las filas en una tabla. Es decir, la tabla se almacena físicamente en el disco en el mismo orden que el índice agrupado. Cada tabla puede tener solo un índice agrupado porque solo puede haber un orden físico de almacenamiento de las filas.
Características:
- Orden físico de las filas: El índice agrupado ordena las filas de la tabla según la clave del índice agrupado.
- Clave primaria: Por defecto, SQL Server crea un índice agrupado en la clave primaria de una tabla.
- Performance: Mejor rendimiento en operaciones de lectura cuando se buscan rangos de valores, ya que las filas están ordenadas y adyacentes.
Ejemplo:
-- Crear una tabla
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100),
salario DECIMAL(10, 2)
);
-- Crear un índice agrupado en la columna 'id' (ya creado por la clave primaria)
CREATE CLUSTERED INDEX idx_id ON empleados(id);
En este ejemplo, la tabla empleados
se almacenará en el disco en orden de la columna id
.
Índices No Agrupados (Non-Clustered Indexes)
Un índice no agrupado no altera el orden físico de las filas en la tabla. En lugar de ello, crea una estructura separada que contiene la clave del índice y un puntero a las filas reales en la tabla. Una tabla puede tener múltiples índices no agrupados.
Características:
- Orden lógico de las filas: El índice no agrupado ordena las claves del índice, pero las filas de la tabla permanecen en su orden físico original.
- Punteros a filas: Cada entrada en un índice no agrupado incluye un puntero a la fila de datos real.
- Performance: Útil para consultas que no requieren un rango de valores sino búsqueda de valores específicos o columnas que no están en el índice agrupado.
Ejemplo:
-- Crear un índice no agrupado en la columna 'nombre'
CREATE NONCLUSTERED INDEX idx_nombre ON empleados(nombre);
En este ejemplo, se crea un índice no agrupado en la columna nombre
. La tabla empleados
no cambia su orden físico, pero hay una estructura separada que ayuda a encontrar filas basándose en el valor de nombre
.
Comparación
- Índice Agrupado:
- Solo puede haber uno por tabla.
- Afecta el orden físico de las filas.
- Eficiente para rangos de datos.
- Índice No Agrupado:
- Puede haber varios por tabla.
- No afecta el orden físico de las filas.
- Eficiente para búsquedas específicas y columnas que no están en el índice agrupado.
Resumen
- Índices Agrupados (Clustered Indexes): Ordenan físicamente las filas de la tabla según la clave del índice. Son eficientes para rangos de datos y tienen solo un índice agrupado por tabla.
- Índices No Agrupados (Non-Clustered Indexes): Crean una estructura separada con punteros a las filas de datos. Son útiles para búsquedas específicas y permiten múltiples índices no agrupados por tabla.
Ambos tipos de índices mejoran el rendimiento de las consultas, pero su elección depende del tipo de consultas y el diseño de la tabla.
Pingback: Creación de Índices en SQL Server | MVPs de LATAM