Compartir a través de


Directrices para diseñar índices no agrupados

Un índice no agrupado contiene los valores de clave del índice y localizadores de fila que apuntan a la ubicación de almacenamiento de los datos de tabla. Para obtener más información acerca de la arquitectura de índices no agrupados, vea Estructuras de índices no agrupados.

Puede crear varios índices no agrupados en una tabla o vista indizada. Por lo general, se deben diseñar índices no agrupados para mejorar el rendimiento de consultas utilizadas con frecuencia no cubiertas por el índice clúster.

Al igual que cuando se utiliza un índice de un libro, el optimizador de consultas busca valores de datos en el índice no agrupado para encontrar la ubicación del valor de datos en la tabla y, a continuación, recupera los datos directamente de esa ubicación. Este sistema convierte a los índices no agrupados en la opción más apropiada para las consultas de coincidencia exacta, dado que el índice contiene entradas que describen la ubicación exacta en la tabla de los valores de datos que se buscan en las consultas. Por ejemplo, para consultar la tabla HumanResources.Employee para todos los subordinados de un jefe determinado, el optimizador de consultas podría utilizar el índice no agrupado IX_Employee_ManagerID, que tiene ManagerID como columna de clave. El optimizador de consultas puede buscar rápidamente todas las entradas del índice que coinciden con el ManagerID especificado. Cada entrada de índice apunta a la página y fila exactas de la tabla, o índice clúster, en que se pueden encontrar los datos correspondientes. Una vez que el optimizador de consultas busca todas las entradas del índice, puede ir directamente a la página y fila exactas para recuperar los datos.

Consideraciones acerca de las bases de datos

Tenga en cuenta las características de la base de datos al diseñar índices no agrupados.

  • Las bases de datos o tablas que exigen pocos requisitos para la actualización, pero suelen contener un gran volumen de datos, se pueden beneficiar de muchos índices no agrupados para mejorar el optimizador de consultas. Considere la creación de índices filtrados para subconjuntos bien definidos de datos con el fin de mejorar el rendimiento de las consultas, reducir los costos de almacenamiento del índice y reducir los costos de mantenimiento del índice en comparación con índices no clúster de la tabla completa.

    Las aplicaciones y bases de datos del sistema de ayuda para la toma de decisiones que contienen principalmente datos de sólo lectura se pueden beneficiar de muchos índices no agrupados. El optimizador de consultas tiene más índices entre los que elegir para determinar el método de acceso más rápido. Además, las características que exigen pocos requisitos para la actualización de la base de datos se traducen en que el mantenimiento de los índices no reducirá el rendimiento.

  • Las aplicaciones y bases de datos de procesamiento de transacciones en línea (OLTP) que contienen tablas deben evitar el exceso de índices. Además, los índices deben ser estrechos, es decir, con la menor cantidad de columnas posible.

    Si se utiliza un gran número de índices en una tabla, el rendimiento de las instrucciones INSERT, UPDATE, DELETE y MERGE se verá afectado, ya que todos los índices deben ajustarse adecuadamente a medida que cambian los datos de la tabla.

Consideraciones sobre consultas

Antes de crear índices no agrupados, debe conocer cómo se tiene acceso a los datos. Considere la posibilidad de utilizar un índice no agrupado para consultas que cuentan con los siguientes atributos:

  • Utilizan cláusulas JOIN o GROUP BY.

    Crean varios índices no agrupados para las columnas que intervienen en operaciones de combinación y de agrupación, y un índice clúster para las columnas de clave externa.

  • No devuelven conjuntos de resultados de gran tamaño.

    Cree índices filtrados para atender consultas que devuelven un subconjunto bien definido de filas en una tabla grande.

  • Contienen columnas que suelen incluirse en las condiciones de búsqueda de una consulta, como la cláusula WHERE, que devuelven coincidencias exactas.

Consideraciones sobre columnas

Tenga en cuenta las columnas que tengan uno o varios de estos atributos:

  • Cubren la consulta.

    Se obtienen mejoras de rendimiento cuando el índice contiene todas las columnas de la consulta. El optimizador de consultas puede buscar todos los valores de columna del índice; no se tiene acceso a los datos de tabla o de índice clúster, lo que se traduce en menos operaciones de E/S de disco. Utilice un índice con columnas incluidas para agregar columnas de cobertura en lugar de crear una clave de índice ancho. Para obtener más información, vea Índice con columnas incluidas.

    Si la tabla tiene un índice clúster, las columnas definidas en él se anexan automáticamente al final de cada índice no agrupado de la tabla. Esto puede producir una consulta cubierta sin especificar las columnas de índice clúster en la definición del índice no agrupado. Por ejemplo, si una tabla tiene un índice clúster en la columna C y un índice no agrupado en las columnas B y A, tendrá como valores de clave las columnas B, A y C.

  • Gran número de valores distintos, como combinaciones de nombres y apellidos, si se utiliza un índice clúster para otras columnas.

    Si hay muy pocos valores distintos, como sólo 1 y 0, la mayoría de las consultas no utilizarán el índice, ya que una exploración de la tabla suele ser más eficaz. Para este tipo de datos, considere la creación de un índice filtrado en un valor distintivo que sólo se da en un número pequeño de filas. Por ejemplo, si la mayoría de los valores es 0, el optimizador de consultas puede utilizar un índice filtrado para las filas de datos que contienen 1.

Opciones de índice

Existen varias opciones de índice que se pueden especificar al crear un índice no agrupado. Debe prestar especial consideración a las siguientes opciones:

  • FILLFACTOR

  • ONLINE

Para obtener más información, vea Establecer opciones de índice.