Non-clustered index en SQL

Non-clustered index en SQL, o índice no agrupado, es una estructura de datos separada que contiene una copia de ciertas columnas de una tabla, junto con un puntero a la fila actual que contiene el resto de los datos. El índice está ordenado según los valores de las columnas indexadas, lo que permite una búsqueda, ordenación y filtrado más rápidos de los datos basados en esas columnas.

Un índice no agrupado se diferencia de un índice agrupado en que una tabla solo puede tener un índice agrupado, pero varios índices no agrupados. El índice agrupado determina el orden físico de las filas de datos en la tabla, mientras que los índices no agrupados no afectan al orden físico de las filas, solo proporcionan una forma rápida de buscar datos basados en las columnas indexadas.

Cuando se crea un índice no agrupado en una tabla, se especifica qué columnas se quieren incluir en el índice, y el motor de base de datos creará una estructura de datos separada que contiene una copia de esas columnas, junto con un puntero a la fila real en la tabla. Cuando se consulta la tabla y se incluye una cláusula WHERE que se refiere a una de las columnas indexadas, el motor de base de datos puede utilizar el índice no agrupado para encontrar rápidamente las filas que cumplen la condición especificada, en lugar de escanear toda la tabla.

La sintaxis para crear un índice no agrupado en SQL es:

CREATE NONCLUSTERED INDEX index_name
ON table_name (column1, column2, ...)

Donde,

  • index_name es el nombre del índice que estás creando.
  • table_name es el nombre de la tabla en la que estás creando el índice.
  • column1, column2, … son las columnas que estás incluyendo en el índice.

Por ejemplo, si quieres crear un índice no agrupado en una tabla llamada «customers» con las columnas «last_name» y «first_name»:

CREATE NONCLUSTERED INDEX idx_customers_name
ON customers (last_name, first_name)

Algunas bases de datos también proporcionan una sintaxis mas reducida para crear un índice no agrupado

CREATE INDEX index_name
ON table_name (column1, column2, ...)

También puedes incluir opciones adicionales en tu sentencia CREATE INDEX, como especificar un orden de clasificación o indicar que una o más columnas se deben incluir en el índice con la cláusula INCLUDE. Es recomendable consultar la documentación de tu motor de base de datos para conocer las opciones específicas disponibles.

A tener en cuenta

  • Una tabla puede tener varios índices no agrupados, pero es importante asegurarse de que los índices no se sobrepongan entre sí y de que cada índice tenga un propósito específico.
  • Es recomendable tener un índice no agrupado en cualquier columna que se utiliza frecuentemente en las cláusulas WHERE de las consultas. Sin embargo, también debes tener cuidado de no crear demasiados índices, ya que esto puede aumentar el tamaño de la base de datos y ralentizar las operaciones de actualización y inserción.
  • Los índices no agrupados pueden ayudar a mejorar el rendimiento de las consultas, pero también pueden aumentar el tiempo de ejecución de las operaciones de actualización y eliminación en las tablas a las que se aplican. Por lo tanto, es importante equilibrar las necesidades de rendimiento de las consultas con las necesidades de rendimiento de las operaciones de actualización y eliminación al decidir qué índices crear y mantener.
  • Además de los índices no agrupados, también puedes crear índices agrupados y índices full-text en algunas bases de datos, cada uno con un propósito específico. Es importante conocer las diferencias entre estos tipos de índices y saber cuándo utilizar cada uno.
  • Es recomendable monitorear y mantener regularmente los índices de la base de datos para asegurarse de que estén funcionando correctamente y estén ayudando a mejorar el rendimiento de las consultas, si no es así, se pueden considerar eliminar o reconstruir los índices que ya no son necesarios.
Scroll al inicio