Compartir a través de


Creación de índices agrupados

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

En este tema

Antes de empezar

Implementaciones típicas

Los índices agrupados se implementan de las maneras siguientes:

  • Restricciones de clave primaria y únicas

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

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

    Un índice creado como parte de la restricción recibe automáticamente el mismo nombre que el nombre de la restricción. Para obtener más información, vea Restricciones de clave principal y externa y restricciones únicas y restricciones de comprobación.

  • Índice independiente de una restricción

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

Limitaciones y restricciones

  • Cuando se crea una estructura de índice agrupada, se requiere espacio en disco para las estructuras antiguas (de origen) y nuevas (destino) en sus respectivos archivos y grupos de archivos. La estructura antigua no se desasigna hasta que se confirma la transacción completa. También se puede requerir espacio temporal adicional en disco para la ordenación. Para obtener más información, consulte Requisitos de espacio en disco para las operaciones DDL de índice.

  • Si se crea un índice agrupado en un montón con varios índices no clúster existentes, todos los índices no agrupados se deben volver a generar para 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 agrupado en una tabla que tiene varios índices no clúster, todos los índices no agrupados se vuelven a generar como parte de la operación DROP. Esto puede tardar mucho tiempo en tablas grandes.

    La manera preferida de compilar índices en tablas grandes es empezar con el índice agrupado y, a continuación, compilar 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 bloqueos de tabla a largo plazo. Esto permite que las consultas o actualizaciones de la tabla subyacente continúen. Para más información, consulte Perform Index Operations Online.

  • La clave de índice de un índice agrupado no puede contener varchar columnas que tengan datos existentes en la unidad de asignación ROW_OVERFLOW_DATA. Si se crea un índice agrupado en una varchar columna y los datos existentes están en la unidad de asignación de IN_ROW_DATA, las acciones de inserción o actualización posteriores en la columna que moverían los datos fuera de la página fallarán. 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).

Seguridad

Permisos

Requiere el permiso ALTER en 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

Para crear un índice agrupado mediante el Explorador de objetos

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

  2. Haga clic con el botón derecho en la carpeta Índices , seleccione Nuevo índice y seleccione Índice 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 del índice.

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

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

  6. Haz clic en Aceptar.

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

Para crear un índice agrupado 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 agrupado.

  2. Haga clic con el botón derecho en la carpeta Tablas y haga clic en Nueva tabla....

  3. Cree una tabla 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 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 Clave principal/única seleccionada o Índice .

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

  9. Haga clic en Cerrar.

  10. En el menú Archivo , haga clic en Guardartable_name.

Uso de Transact-SQL

Para crear un índice agrupado

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

  2. En la barra de 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 más información, consulte CREATE INDEX (Transact-SQL).

Véase también

Crear claves principales
Crear restricciones únicas