Compartir a través de


Montones (tablas sin índices clúster)

Un montón es una tabla que no tiene un índice clúster. En las tablas almacenadas, se pueden crear uno o varios índices no clúster como un montón. Los datos se almacenan en el montón sin especificar un orden. Normalmente, en un principio los datos se almacenan en el orden en el que las filas se insertan en la tabla, pero Motor de base de datos puede mover los datos en el montón para almacenar las filas de forma eficaz, de modo que no se puede predecir el orden de los datos. Para garantizar el orden de las filas que se devuelven de un montón, debe usar la cláusula ORDER BY. Para especificar el orden de almacenamiento de las filas, cree un índice clúster en la tabla, de modo que la tabla no sea un montón.

[!NOTA]

A veces, hay buenos motivos para dejar una tabla como montón en lugar de crear un índice clúster, pero para usar los montones de forma eficaz se requieren conocimientos avanzados. La mayoría de las tablas deben tener un índice clúster cuidadosamente elegido a menos que exista un buen motivo para dejar la tabla como un montón.

Cuándo se usa un montón

Si una tabla es un montón y no tiene ningún índice no clúster, debe examinarse la tabla completa (recorrido de tabla) cuando se busca una fila. Esto puede resultar aceptable si la tabla es pequeña, como una lista con las 12 oficinas regionales de una empresa.

Cuando una tabla se almacena como un montón, las filas individuales se identifican mediante una referencia a un identificador de fila (RID) que se compone del número de archivo, el número de páginas de datos y el espacio de la página. El identificador de fila es una estructura pequeña y eficaz. A veces, los arquitectos de datos usan montones cuando el acceso a los datos se realiza siempre a través de índices no clúster y el RID es menor que la clave de índice clúster.

Cuándo no se usa un montón

No use un montón cuando los datos se devuelvan con frecuencia ordenados. Un índice clúster en la columna de ordenación podría impedir la operación de ordenación.

No use un montón cuando los datos se agrupan juntos a menudo. Los datos deben estar ordenados antes de que se agrupen y un índice clúster en la columna de ordenación podría impedir la operación de ordenación.

No use un montón cuando a menudo se consulten rangos de datos de la tabla. Un índice clúster en la columna de rango impedirá que se ordene el montón completo.

No use un montón cuando no haya índices no clúster y la tabla sea grande. En un montón, deben leerse todas las filas del montón para buscar una fila.

Administrar montones

Para crear un montón, cree una tabla sin un índice clúster. Si la tabla ya tiene un índice clúster, quite el índice clúster para convertir de nuevo la tabla en un montón.

Para quitar un montón, cree un índice clúster en el montón.

Para volver a crear un montón a fin de recuperar el espacio desaprovechado, cree un índice clúster en el montón y quítelo después.

Nota de advertenciaAdvertencia

Para crear o quitar índices clúster, es necesario volver a escribir toda la tabla. Si la tabla tiene índices no clúster, todos los índices no clúster deberán volver a crearse cada vez que cambie el índice clúster. Por tanto, al convertir un montón en una estructura de índice clúster o viceversa, puede necesitarse mucho tiempo y gran cantidad de espacio para reordenar los datos en tempdb.

Contenido relacionado

CREATE INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Índices agrupados y no agrupados descritos