Crear índices clúster

Puede crear índices clúster en las tablas de SQL Server 2012 mediante SQL Server Management Studio o Transact-SQL. Con pocas excepciones, todas las tablas deben tener un índice clúster. Además de mejorar el rendimiento de las consultas, un índice clúster se puede recompilar o reorganizar a petición para controlar la fragmentación de las tablas. También se puede crear un índice clúster en una vista. (Los índices clúster se definen en el tema Índices agrupados y no agrupados descritos.)

En este tema

  • Antes de empezar:

    Implementaciones típicas

    Limitaciones y restricciones

    Seguridad

  • Para crear un índice clúster en una tabla, usando:

    SQL Server Management Studio

    Transact-SQL

Antes de empezar

Implementaciones típicas

Los 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. Puede especificarse un índice clúster único si todavía no existe un índice clúster 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 entre claves principales y claves externas y Restricciones UNIQUE y restricciones CHECK.

  • Índice independiente de una restricción

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

Limitaciones y restricciones

  • Cuando se crea una estructura de índice clúster, 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 Requisitos de espacio en disco para operaciones DDL de índice.

  • Si se crea un índice clúster en un montón con varios índices no clúster existentes, se deben volver a generar todos los índices no clúster de manera que contengan el valor de clave de agrupación en clústeres en lugar del identificador de fila (RID). De forma similar, si se quita un índice clúster de una tabla con varios índices no clúster, se vuelven a generar todos los índices no clúster 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 clúster y, a continuación, generar los índices no clúster. 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 índice en línea.

  • La clave de índice de un índice clúster no puede contener columnas varchar con datos existentes en la unidad de asignación ROW_OVERFLOW_DATA. Si se crea un índice clúster en una columna varchar y los datos existentes están en la unidad de asignación IN_ROW_DATA, no se realizarán correctamente las siguientes acciones de inserción o actualización de la columna que intenten insertar los datos de manera no consecutiva. Para obtener información acerca de las tablas que pueden contener datos de desbordamiento de fila, use la función de administración dinámica sys.dm_db_index_physical_stats (Transact-SQL).

Seguridad

Permisos

Requiere el permiso ALTER en la tabla o la vista. El usuario debe ser miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_ddladmin y db_owner.

Icono de flecha usado con el vínculo Volver al principio[Top]

Usar SQL Server Management Studio

Para crear un índice clúster mediante el Explorador de objetos

  1. En el Explorador de objetos, expanda la tabla en la que desea crear un índice clúster.

  2. Haga clic con el botón secundario en la carpeta Índices, apunte a Nuevo índice y seleccione Índice clúster….

  3. En el cuadro de diálogo Nuevo índice, en la página General, escriba el nombre del nuevo índice en el cuadro Nombre de índice.

  4. Debajo de Columnas de clave de índice, haga clic en Agregar.

  5. En el cuadro de diálogo Seleccionar columnas de table_name, active la casilla de la columna de tabla que se va a agregar al índice clúster.

  6. Haga clic en Aceptar.

  7. En el cuadro de diálogo Nuevo índice, haga clic en Aceptar.

Para crear un índice clúster mediante el Diseñador de tablas

  1. En el Explorador de objetos, expanda la base de datos en la que desea crear una tabla con un índice clúster.

  2. Haga clic con el botón secundario en la carpeta Tablas y, a continuación, haga clic en Nueva tabla….

  3. Cree una tabla nueva como lo haría normalmente. Para obtener más información, vea Crear tablas (motor de base de datos).

  4. Haga clic con el botón secundario en la nueva tabla creada anteriormente y, a continuación, haga clic en Diseño.

  5. En el menú Diseñador de tablas, haga clic en Índices o claves.

  6. En el cuadro de diálogo Índices o claves, haga clic en Agregar.

  7. Seleccione el nuevo índice en el cuadro de texto Índice o clave Primary/Unique seleccionados.

  8. En la cuadrícula, seleccione Crear como CLUSTERED y elija en la lista desplegable que aparece a la derecha de la propiedad.

  9. Haga clic en Cerrar.

  10. En el menú Archivo, haga clic en Guardar table_name.

Icono de flecha usado con el vínculo Volver al principio[Top]

Usar Transact-SQL

Para crear un índice clúster

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.

    USE AdventureWorks2012;
    GO
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable
        (TestCol1 int NOT NULL,
         TestCol2 nchar(10) NULL,
         TestCol3 nvarchar(50) NULL);
    GO
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 
        ON dbo.TestTable (TestCol1); 
    GO
    

Para obtener más información, vea CREATE INDEX (Transact-SQL).

Icono de flecha usado con el vínculo Volver al principio[Top]

Vea también

Conceptos

Crear claves principales

Crear restricciones UNIQUE