Crear índices con columnas incluidasCreate Indexes with Included Columns

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2016)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

En este tema se describe cómo agregar columnas incluidas (o sin clave) para ampliar la funcionalidad de índices no clúster en SQL ServerSQL Server mediante SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to add included (or nonkey) columns to extend the functionality of nonclustered indexes in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Al incluir columnas sin clave, puede crear índices no clúster que abarcan más consultas.By including nonkey columns, you can create nonclustered indexes that cover more queries. Esto se debe a que las columnas sin clave tienen las siguientes ventajas:This is because the nonkey columns have the following benefits:

  • Pueden ser tipos de datos que no están permitidos como columnas de clave de índice.They can be data types not allowed as index key columns.

  • El Motor de base de datosDatabase Engine no las tiene en cuenta cuando calcula el número de columnas de clave de índice o el tamaño de las claves de índice.They are not considered by the Motor de base de datosDatabase Engine when calculating the number of index key columns or index key size.

    Un índice con columnas sin clave puede mejorar significativamente el rendimiento de una consulta cuando todas las columnas de la consulta se incluyen como columnas de clave o columnas sin clave.An index with nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. Las mejoras en el rendimiento se consiguen porque el optimizador de consultas puede localizar todos los valores de las columnas del índice, sin tener acceso a los datos de la tabla o del índice clúster, lo que da como resultado menos operaciones de E/S de disco.Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.

Nota

Cuando un índice contiene todas las columnas a las que hace referencia una consulta, normalmente se dice que abarca la consulta.When an index contains all the columns referenced by a query it is typically referred to as covering the query.

En este temaIn This Topic

Antes de comenzar Before You Begin

Recomendaciones de diseño Design Recommendations

  • Rediseñe índices no clúster con un tamaño de las claves de índice grande para que solo las columnas utilizadas para búsquedas sean columnas de clave.Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. Convierta todas las demás columnas que abarcan la consulta en columnas sin clave.Make all other columns that cover the query into nonkey columns. De esta forma, tendrá todas las columnas necesarias para abarcar la consulta pero la clave de índice en sí será pequeña y eficaz.In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • Incluya columnas sin clave en un índice no agrupado para evitar que se superen las limitaciones actuales de tamaño del índice de un máximo de 32 columnas de clave y un tamaño máximo de clave de índice de 1700 bytes (16 columnas clave y 900 bytes antes de SQL Server 2016SQL Server 2016).Include nonkey columns in a nonclustered index to avoid exceeding the current index size limitations of a maximum of 32 key columns and a maximum index key size of 1,700 bytes (16 key columns and 900 bytes prior to SQL Server 2016SQL Server 2016). El Motor de base de datosDatabase Engine no tiene en cuenta las columnas sin clave al calcular el número de columnas de clave de índice o el tamaño de las claves de índice.The Motor de base de datosDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

Limitaciones y restricciones Limitations and Restrictions

  • Las columnas sin clave solo pueden definirse en índices no clúster.Nonkey columns can only be defined on nonclustered indexes.

  • Todos los tipos de datos excepto text, ntexte image se pueden usar como columnas sin clave.All data types except text, ntext, and image can be used as nonkey columns.

  • Las columnas calculadas que son deterministas, y precisas o imprecisas, pueden ser columnas sin clave.Computed columns that are deterministic and either precise or imprecise can be nonkey columns. Para obtener más información, vea Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

  • Las columnas calculadas derivadas de los tipos de datos image, ntexty text pueden ser columnas sin clave siempre que se permita el tipo de datos de la columna calculada como columna de índice sin clave.Computed columns derived from image, ntext, and text data types can be nonkey columns as long as the computed column data type is allowed as a nonkey index column.

  • Las columnas sin clave no se pueden quitar de una tabla, a menos que antes se quite el índice de la tabla.Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • Las columnas sin clave no se pueden cambiar, excepto para hacer lo siguiente:Nonkey columns cannot be changed, except to do the following:

    • Cambiar la nulabilidad de NOT NULL a NULL.Change the nullability of the column from NOT NULL to NULL.

    • Aumentar la longitud de las columnas varchar, nvarcharo varbinary .Increase the length of varchar, nvarchar, or varbinary columns.

Seguridad Security

Permisos Permissions

Requiere el permiso ALTER en la tabla o la vista.Requires ALTER permission on the table or view. 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 .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Usar SQL Server Management Studio Using SQL Server Management Studio

Para crear un índice con columnas sin claveTo create an index with nonkey columns

  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 crear un índice con columnas sin clave.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to create an index with nonkey columns.

  2. Haga clic en el signo más para expandir la carpeta Tablas .Click the plus sign to expand the Tables folder.

  3. Haga clic en el signo más para expandir la tabla en la que desea crear un índice con columnas sin clave.Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. Haga clic con el botón derecho en la carpeta Índices , seleccione Nuevo índicey, luego, Índice no agrupado….Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. 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 .In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. En la pestaña Columnas de clave de índice , haga clic en Agregar.Under the Index key columns tab, click Add….

  7. En el cuadro de diálogo Seleccionar columnas detable_name , active las casillas de las columnas de tabla que se van a agregar al índice.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index.

  8. Haga clic en Aceptar.Click OK.

  9. En la pestaña Columnas incluidas , haga clic en Agregar.Under the Included columns tab, click Add….

  10. En el cuadro de diálogo Seleccionar columnas detable_name , active las casillas de las columnas de tabla que se van a agregar al índice como columnas sin clave.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index as nonkey columns.

  11. Haga clic en Aceptar.Click OK.

  12. En el cuadro de diálogo Nuevo índice , haga clic en Aceptar.In the New Index dialog box, click OK.

Usar Transact-SQL Using Transact-SQL

Para crear un índice con columnas sin claveTo create an index with nonkey columns

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

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