Compartir a través de


Crear un índice clúster

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Puede crear índices agrupados en tablas mediante SQL Server Management Studio o mediante 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 artículo Índices clúster y no clúster.)

Implementaciones típicas

Los clúster se implementan de las formas siguientes:

  • PRIMARY KEY y UNIQUE restricciones**

    Cuando se crea una restricción PRIMARY KEY, se crea automáticamente un índice clúster único en la columna o las columnas si aún no existe un índice clúster en la tabla y no se especifica un índice no clúster único. 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, consulte Restricciones de clave principal y externa 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.

Limitations

  • 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 antigua estructura no se desasignará hasta que se confirme la transacción completa. Podría ser que también se necesite espacio en disco temporal para ordenar. Para más información, consulte Disk Space Requirements for Index DDL Operations.

  • 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 excluye 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, el proceso podría 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 ONLINE opción en ON al crear índices en tablas existentes. Cuando se establece en ON, los bloqueos de tabla a largo plazo no se mantienen. Así se habilita la continuación de consultas o actualizaciones de la tabla subyacente. Para obtener más información, consulte Realizar operaciones de índice en línea.

  • 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 correctamente las siguientes acciones de inserción o actualización en la columna que intenten insertar los datos de manera no consecutiva. Para obtener información sobre 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).

Permissions

Debe tener un permiso de ALTER sobre la tabla o 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 .

Uso de SQL Server Management Studio

Crear un índice clúster desde 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 derecho en la carpeta Índices, seleccione Nuevo índice y, luego, Índice no agrupado....

  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. En Columnas de clave de índice, seleccione Agregar....

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

  6. Selecciona Aceptar.

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

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 derecho en la carpeta Tablas y, luego, seleccione 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 derecho en la nueva tabla creada anteriormente y, luego, seleccione Diseño.

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

  6. En el cuadro de diálogo Índices o claves, seleccione Agregar.

  7. Seleccione el nuevo índice en el cuadro de texto Clave principal o única, o índice seleccionado .

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

  9. Selecciona Cerrar.

  10. En el menú Archivo, seleccione Guardarnombre_de_tabla.

Uso de Transact-SQL

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

  2. En la barra Estándar, seleccione Nueva consulta.

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

    USE AdventureWorks2022;
    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.