Directrices para diseñar ndices clúster

Los índices agrupados ordenan y almacenan las filas de los datos de la tabla de acuerdo con los valores de la clave del índice. Sólo puede haber un índice clúster por cada tabla, porque las filas de datos sólo pueden estar ordenadas de una forma. Para obtener más información acerca de la arquitectura de los ndices clúster, vea Estructuras de ndices clúster.

Salvo excepciones, todas las tablas deben incluir un índice clúster definido en las columnas que presenten las siguientes características:

  • Se pueden utilizar en consultas frecuentes.

  • Proporcionan un alto grado de unicidad.

    [!NOTA]

    Cuando crea una restricción PRIMARY KEY, se crea automáticamente un índice único en las columnas. De forma predeterminada, este índice está agrupado; sin embargo, puede especificar un índice no agrupado cuando crea la restricción.

  • Se pueden utilizar en consultas de intervalo.

Si el índice clúster no se crea con la propiedad UNIQUE, Database Engine (Motor de base de datos) agrega automáticamente una columna uniqueifier de 4 bytes a la tabla. Cuando es necesario, Database Engine (Motor de base de datos) agrega automáticamente un valor uniqueifier a una fila para que cada clave sea única. Esta columna y sus valores se utilizan de forma interna; los usuarios no pueden verlos ni tener acceso a ellos.

Consideraciones sobre las consultas

Antes de crear índices agrupados, debe conocer cómo se tiene acceso a los datos. Considere que utiliza un índice clúster en consultas que realizan lo siguiente:

  • Devuelven un intervalo de valores mediante la utilización de operadores como BETWEEN, >, >=, < y <=.

    Cuando la fila se encuentra con el primer valor mediante el índice clúster, se garantiza que las filas con los valores indizados posteriores son físicamente adyacentes. Por ejemplo, si una consulta recupera registros entre un intervalo de números de pedidos de ventas, un índice clúster en la columna SalesOrderNumber puede localizar rápidamente la fila que contiene el número de pedido de ventas inicial y, a continuación, recuperar todas las filas siguientes de la tabla hasta alcanzar el último número de pedido de ventas.

  • Devuelven grandes conjuntos de resultados.

  • Utilizan cláusulas JOIN; por lo general, son columnas de clave externa.

  • Utilizan cláusulas ORDER BY o GROUP BY.

    Un índice en las columnas especificadas en la cláusula ORDER BY o GROUP BY puede eliminar la necesidad de que Database Engine (Motor de base de datos) ordene los datos, puesto que las filas ya están ordenadas. De ese modo, el rendimiento de las consultas aumenta.

Consideraciones sobre las columnas

Por regla genera, debe definir la clave de índice clúster con el menor número de columnas posible. Considere columnas que cuentan con uno o varios de los siguientes atributos:

  • Son únicas o contienen muchos valores distintos

    Por ejemplo, un Id. de empleado identifica de forma exclusiva a los empleados. Un índice clúster o una restricción PRIMARY KEY en la columna EmployeeID mejoraría el rendimiento de las consultas que buscan información del empleado basándose en el número de Id. del empleado. También se podría crear un índice clúster en las columnas LastName, FirstName y MiddleName, ya que los registros de empleados se agrupan y se consultan con frecuencia de esta forma y la combinación de estas columnas seguiría proporcionando un alto grado de diferencia.

  • Se tiene acceso a ellas de forma secuencial

    Por ejemplo, un Id. de producto identifica de forma exclusiva los productos de la tabla Production.Product en la base de datos AdventureWorks. Un índice clúster en ProductID mejoraría las consultas donde se especifica una búsqueda secuencial, como WHERE ProductID BETWEEN 980 and 999. Esto se debe a que las filas se almacenan de forma ordenada en esta columna de clave.

  • Se definen como IDENTITY, ya que la columna va a ser única en la tabla

  • Se utilizan con frecuencia para ordenar los datos recuperados de una tabla

    Puede resultar conveniente agrupar, es decir, ordenar físicamente la tabla de dicha columna para evitar una operación de ordenación cada vez que se consulta la columna.

Los índices agrupados no son adecuados para los siguientes atributos:

  • Columnas sometidas a cambios frecuentes

    Esto provoca que se mueva toda la fila, ya que Database Engine (Motor de base de datos) debe mantener los valores de los datos de la fila ordenados físicamente. Esta consideración es importante en sistemas de procesamiento de transacciones de gran volumen en los que los datos tienden a ser volátiles.

  • Claves amplias

    Las claves amplias se componen de varias columnas o varias columnas de gran tamaño. Los valores clave del índice clúster se utilizan en todos los índices no agrupados como claves de búsqueda. Los índices no agrupados definidos en la misma tabla serán bastante más grandes, ya que sus entradas contienen la clave de agrupación en clústeres y las columnas de clave definidas para dicho índice no agrupado.

Opciones del índice

Cuando se crea un índice clúster, se pueden especificar varias opciones de índice. Generalmente, los ndices clúster son bastante grandes, por lo que debe prestarse especial atención a las opciones siguientes:

  • SORT_IN_TEMPDB

  • DROP_EXISTING

  • FILLFACTOR

  • ONLINE

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