Crear índices no clúster

Se pueden crear varios índices no clúster en una tabla o vista indizada. Normalmente, los índices no clúster se crean para mejorar el rendimiento de las consultas usadas con frecuencia y que no cubre el índice clúster.

Implementaciones habituales

Los índices no clúster se implementan de las formas siguientes:

  • Restricciones PRIMARY KEY y UNIQUE

    Cuando se crea una restricción PRIMARY KEY, se crea automáticamente un índice clúster único en las columnas si aún no existe un índice clúster en la tabla o no se ha especificado un índice no clúster. La columna de clave principal no puede permitir valores NULL.

    Cuando cree una restricción UNIQUE, se creará un índice no clúster único para exigir una restricción UNIQUE de forma predeterminada. Si aún no existe ningún índice clúster en la tabla, puede especificar un índice clúster único. Para obtener más información, vea Restricciones PRIMARY KEY y Restricciones UNIQUE.

  • Índice independiente de una restricción

    De forma predeterminada, se crea un índice no clúster si no hay ninguno clúster especificado. El número máximo de índices no clúster que se pueden crear por tabla es 999. Se incluyen los índices creados por restricciones PRIMARY KEY o UNIQUE, pero no los índices XML.

  • Índice no clúster en una vista indizada

    Una vez creado un índice clúster único en una vista, se pueden crear índices no clúster. Para obtener más información, vea Crear vistas indizadas.

Índices con columnas incluidas

Al crear un índice no clúster para abarcar una consulta, se pueden incluir columnas sin clave en la definición del índice para abarcar las columnas de la consulta que no se utilizan como columnas de búsqueda principales. Las mejoras en el rendimiento se consiguen porque el optimizador de consultas puede localizar todos los datos de columnas necesarios del índice sin tener acceso a la tabla ni al índice clúster. Para obtener más información, vea Índice con columnas incluidas.

Índice con un predicado de filtro

Un índice filtrado es un índice no clúster optimizado, especialmente indicado para atender consultas que realizan selecciones a partir un subconjunto bien definido de datos. Utiliza un predicado de filtro para indizar una parte de las filas de la tabla. Un índice filtrado bien diseñado puede mejorar el rendimiento de las consultas y reducir los costos de almacenamiento del índice en relación con los índices de tabla completa, así como los costos de mantenimiento.

Para obtener más información, vea Directrices generales para diseñar índices filtrados.

Requisitos de espacio en disco

Para obtener información acerca de los requisitos de espacio en disco para los índices no clúster, vea Determinar requisitos de espacio en disco del índice.

Consideraciones de rendimiento

Aunque es importante que el índice incluya todas las columnas utilizadas por la consulta, evite agregar columnas innecesarias. El hecho de agregar demasiadas columnas de índice, con o sin clave, puede tener las siguientes consecuencias en el rendimiento:

  • Cabrán menos filas de índice en una página, por lo que aumentará la E/S de disco y se reducirá la eficacia de la caché.

  • Se necesitará más espacio en disco para almacenar el índice.

  • Puede que el mantenimiento del índice haga aumentar el tiempo necesario para realizar operaciones de modificación, inserción, actualización, eliminación o mezcla en la tabla subyacente o la vista indizada.

Debe determinar si la mejora del rendimiento de las consultas compensa el efecto en el rendimiento durante la modificación de datos y en los requisitos de espacio en disco adicionales. Para obtener más información acerca de la evaluación del rendimiento de las consultas, vea Optimizar consultas.

Considere la posibilidad de usar un índice filtrado para mejorar el rendimiento cuando los datos de las tablas tengan columnas con subconjuntos de filas bien definidos, por ejemplo columnas dispersas, columnas con una mayoría de valores NULL, columnas con categorías de valores y columnas con intervalos de valores diferenciados. Para obtener más información, vea Directrices generales para diseñar índices filtrados.

Para crear una restricción PRIMARY KEY o UNIQUE al crear una tabla

CREATE TABLE (Transact-SQL)

Para crear una restricción PRIMARY KEY o UNIQUE en una tabla existente

ALTER TABLE (Transact-SQL)

Para crear un índice

CREATE INDEX (Transact-SQL)