Crear ndices clúster

Con pocas excepciones, todas las tablas deben tener un índice agrupado. Además de mejorar el rendimiento de las consultas, un índice agrupado se puede volver a generar o reorganizar a petición para controlar la fragmentación de las tablas. También se puede crear un índice agrupado en una vista.

Implementaciones típicas

Los índices agrupados 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 agrupado único en la columna (o columnas) si todavía no existe un índice agrupado en la tabla y no se especifica un índice no agrupado único. La columna de clave principal no puede admitir valores NULL.

    Cuando se crea una restricción UNIQUE, se crea un índice no agrupado único para aplicar una restricción UNIQUE de forma predeterminada. Puede especificarse un índice agrupado único si todavía no existe un índice agrupado en la tabla.

    Un índice creado como parte de la restricción recibe automáticamente el mismo nombre que la restricción. Para obtener más información, vea Restricciones PRIMARY KEY y Restricciones UNIQUE.

  • Índice independiente de una restricción

    Puede crear un índice agrupado en una columna que no sea la de clave principal si se especificó una restricción de clave principal no agrupada.

  • Vista indizada

    Para crear una vista indizada, se define un índice agrupado único en una o varias columnas de vista. La vista se materializa y el conjunto de resultados se almacena en el nivel hoja del índice, del mismo modo en que los datos de tabla se almacenan en un índice agrupado. Para obtener más información, vea Crear vistas indizadas.

Selección de columna de clave

Como sólo se puede tener un índice agrupado por tabla, es muy importante determinar en qué columnas se crea un índice agrupado. Para obtener más información acerca de cómo seleccionar la columna correcta, vea Directrices para diseñar ndices clúster.

La clave de índice de un índice agrupado no puede contener columnas varchar con datos existentes en la unidad de asignación ROW_OVERFLOW_DATA. Si se crea un índice agrupado en una columna varchar y los datos existentes están en la unidad de asignación IN_ROW_DATA, no se realizarán las siguientes acciones de inserción o actualización de la columna que intenten insertar los datos de manera no consecutiva. Para obtener más información acerca de las unidades de asignación, vea Organización de tablas e índices.

Requisitos de espacio en disco

Cuando se crea una estructura de índice agrupado, se requiere espacio en disco para ambas estructuras, la antigua (origen) y la nueva (destino), en los archivos y grupos de archivos correspondientes. La asignación de la antigua estructura no se cancela hasta que se valide la transacción completa. Puede que también se necesite espacio en disco temporal para ordenar. Para obtener más información, vea Determinar requisitos de espacio en disco del índice.

Consideraciones de rendimiento

Si se crea un índice agrupado en un montón con varios índices no agrupados existentes, se deben volver a generar todos los índices no agrupados de manera que contengan el valor de clave de agrupación en lugar del identificador de fila (RID). De forma similar, si se quita un índice agrupado de una tabla con varios índices no agrupados, se vuelven a generar todos los índices no agrupados como parte de la operación DROP. Si las tablas son de gran tamaño, la operación puede prolongarse significativamente.

La mejor manera de generar índices en tablas de gran tamaño es empezar con el índice agrupado y, a continuación, generar los índices no agrupados. Considere la posibilidad de establecer la opción ONLINE en ON al crear índices en tablas existentes. Cuando se establece en ON, no se mantienen los bloqueos de tabla de larga duración. Así se habilita la continuación de consultas o actualizaciones de la tabla subyacente. Para obtener más información, vea Realizar operaciones de índices en línea.

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

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

Para crear un índice