Compartir a través de


Realizar operaciones de índice en línea

En este tema se describe cómo crear, recompilar o quitar índices en línea en SQL Server 2014 mediante SQL Server Management Studio o Transact-SQL. La opción ONLINE permite el acceso simultáneo del usuario a los datos de índice clúster o tabla subyacentes y a los índices no clúster asociados durante estas operaciones de índice. Por ejemplo, mientras un usuario vuelve a generar un índice agrupado, ese usuario y otros pueden seguir actualizando y consultando los datos subyacentes. Al realizar operaciones de lenguaje de definición de datos (DDL) sin conexión, como compilar o volver a generar un índice agrupado; estas operaciones contienen bloqueos exclusivos en los datos subyacentes y los índices asociados. Esto evita modificaciones y consultas en los datos subyacentes hasta que se complete la operación de índice.

Nota:

Las operaciones de índice en línea no están disponibles en todas las ediciones de SQL Server. Para obtener más información, vea Features Supported by the Editions of SQL Server 2014.

En este tema

Antes de empezar

Limitaciones y restricciones

  • Se recomienda realizar operaciones de índice en línea para entornos empresariales que operan 24 horas al día, siete días a la semana, en los que la necesidad de actividad simultánea del usuario durante las operaciones de índice es vital.

  • La opción ONLINE está disponible en las siguientes declaraciones Transact-SQL.

  • Para obtener más limitaciones y restricciones relacionadas con la creación, regeneración o eliminación de índices en línea, consulte Directrices para las operaciones de índice en línea.

Seguridad

Permisos

Requiere el permiso ALTER en la tabla o vista.

Uso de SQL Server Management Studio

Para reconstruir un índice en línea

  1. En el Explorador de objetos, haga clic en el signo más para expandir la base de datos que contiene la tabla en la que desea recompilar un índice en línea.

  2. Expanda la carpeta Tablas .

  3. Haga clic en el signo más para expandir la tabla en la que desea reconstruir un índice en línea.

  4. Expanda la carpeta Índices .

  5. Haga clic con el botón derecho en el índice que desea recompilar en línea y seleccione Propiedades.

  6. Debajo de Seleccionar una página, seleccione Opciones.

  7. Seleccione Permitir el procesamiento de DML en línea y, a continuación, seleccione True en la lista.

  8. Haz clic en Aceptar.

  9. Haga clic con el botón derecho en el índice que desea recompilar en línea y seleccione Recompilar.

  10. En el cuadro de diálogo Recompilar índices , compruebe que el índice correcto está en la cuadrícula Índices para recompilar y haga clic en Aceptar.

Uso de Transact-SQL

Para crear, reconstruir o eliminar un índice de manera online

  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. En el ejemplo se reconstruye un servicio existente en línea.

    USE AdventureWorks2012;  
    GO  
    ALTER INDEX AK_Employee_NationalIDNumber ON HumanResources.Employee  
    REBUILD WITH (ONLINE = ON);  
    GO  
    

    En el siguiente ejemplo, se elimina un índice agrupado de forma en línea y se mueve la tabla resultante (heap) al grupo de archivos NewGroup mediante la cláusula MOVE TO. Las vistas de sys.indexescatálogo , sys.tablesy sys.filegroups se consultan para comprobar la ubicación del índice y de la tabla en los grupos de archivos antes y después del traslado.

    USE AdventureWorks2012;
    GO
    --Create a clustered index on the PRIMARY filegroup if the index does not exist.
    IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
                N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
        CREATE UNIQUE CLUSTERED INDEX
            AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
            StartDate)
        ON 'PRIMARY';
    GO
    -- Verify filegroup location of the clustered index.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
    GO
    --Create filegroup NewGroup if it does not exist.
    IF NOT EXISTS (SELECT name FROM sys.filegroups
                    WHERE name = N'NewGroup')
        BEGIN
        ALTER DATABASE AdventureWorks2012
            ADD FILEGROUP NewGroup;
        ALTER DATABASE AdventureWorks2012
            ADD FILE (NAME = File1,
                FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
            TO FILEGROUP NewGroup;
        END
    GO
    --Verify new filegroup
    SELECT * from sys.filegroups;
    GO
    -- Drop the clustered index and move the BillOfMaterials table to
    -- the Newgroup filegroup.
    -- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
    DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials 
        WITH (ONLINE = ON, MOVE TO NewGroup);
    GO
    -- Verify filegroup location of the moved table.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');
    GO
    

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