Crear índices con columnas incluidas

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

En este artículo se describe cómo agregar columnas incluidas (o sin clave) para ampliar la funcionalidad de índices no clúster en SQL Server mediante SQL Server Management Studio o Transact-SQL. Al incluir columnas sin clave, puede crear índices no clúster que abarcan más consultas. Esto se debe a que las columnas sin clave tienen las siguientes ventajas:

  • Pueden ser tipos de datos que no están permitidos como columnas de clave de índice.
  • El motor de base de datos no los tiene en cuenta cuando calcula el número de columnas de clave de índice o el tamaño de las claves de índice.

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. 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 tabla o del índice agrupado, lo que da como resultado menos operaciones de E/S de disco.

Nota:

Cuando un índice contiene todas las columnas a las que hace referencia una consulta, normalmente se dice que abarca la consulta.

Recomendaciones de diseño

  • Rediseñe índices no agrupados que tengan una clave de índice de gran tamaño, de tal modo que solo las columnas utilizadas para búsquedas sean columnas de clave. Convierta todas las demás columnas que abarcan la consulta en columnas sin clave. De esta forma, tendrá todas las columnas necesarias para abarcar la consulta, pero la clave de índice en sí será pequeña y eficaz.

  • 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 2016 (13.x)). El motor de base de datos 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.

  • El orden de las columnas sin clave en la definición de índice no afecta al rendimiento de las consultas que usan el índice.

  • Evite índices no agrupados muy anchos en los que las columnas incluidas no representen un subconjunto lo suficientemente estrecho de las columnas de la tabla subyacente. Si agrega índices anchos, compruebe siempre si el costo de actualizar un índice adicional ancho compensa el costo de leer directamente desde la tabla.

Limitaciones y restricciones

  • Las columnas sin clave solo pueden definirse en índices no clúster.

  • Todos los tipos de datos excepto text, ntexte image se pueden usar como columnas sin clave.

  • Las columnas calculadas que son deterministas, y precisas o imprecisas, pueden ser columnas sin clave. Para obtener más información, vea Índices en columnas calculadas.

  • 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.

  • Las columnas sin clave no se pueden quitar de una tabla, a menos que primero se quite el índice de la tabla.

  • Las columnas sin clave no se pueden cambiar, excepto para hacer lo siguiente:

    • Cambiar la nulabilidad de NOT NULL a NULL.

    • Aumentar la longitud de las columnas varchar, nvarcharo varbinary .

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 .

Uso de SQL Server Management Studio para crear un índice con columnas sin clave

  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 quiere crear un índice con columnas sin clave.

  2. Selecciona el signo más para expandir la carpeta Tablas.

  3. Haga clic en el signo más para expandir la tabla en la que quiere crear un índice con columnas sin clave.

  4. Haga clic con el botón derecho en la carpeta Índices, seleccione Nuevo índice y, luego, Índice no agrupado....

  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 .

  6. En la pestaña Columnas de clave de índice, seleccione Agregar....

  7. En el cuadro de diálogo Seleccionar columnas de table_name, active la o las casillas de la o las columnas de tabla que se van a agregar al índice.

  8. Seleccione Aceptar.

  9. En la pestaña Columnas incluidas, seleccione Agregar....

  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.

  11. Seleccione Aceptar.

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

Uso de Transact-SQL para crear un índice con columnas sin clave

  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
    -- 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