2009-05-16 14 views

Respuesta

3

Existen varias diferencias. Básicamente, la reconstrucción es una reconstrucción total de un índice: construirá un nuevo índice, luego descartará el existente, mientras que reorganizarlo simplemente, bueno ... lo reorganizará .

This entrada de blog Me encontré hace un tiempo lo explicaré mucho mejor que yo. :)

+0

Iba a publicar ese enlace también. :-) En internet, casi toda la información está allí, solo tiene que encontrarla. – MicSim

25

Piensa cómo se implementa el índice. Generalmente es un tipo de árbol, como B + Tree o B-Tree. El índice en sí se crea mirando las claves en los datos y construyendo el árbol para que la tabla se pueda buscar de manera eficiente.

Cuando reorganizar el índice, que pasan por el índice existente, la limpieza de los bloques de registros eliminados, etc. Esto podría hacerse (y se encuentra en algunas bases de datos) cuando se hace una deleción, pero que impone algunas pena de rendimiento. en cambio, lo haces por separado para hacerlo en modo más o menos por lotes.

Cuando reconstruir el índice, se elimina el árbol existente y leer todos los registros, la construcción de un nuevo árbol directamente de los datos. Eso le da un árbol nuevo, y afortunadamente optimizado, que puede ser mejor que los resultados de reorganizar la tabla; también le permite regenerar el árbol si de alguna manera se ha corrompido.

+1

Muchas gracias – Anoop

+0

feliz de ayudar, de nada. –

0

"Reorganizar índice" es un proceso de limpieza, organización y desfragmentación del "nivel de hoja" del árbol B (en realidad, páginas de datos).

La reconstrucción del índice está cambiando todo el árbol B, recreando el índice.

Se recomienda reorganizar el índice cuando la fragmentación del índice es del 10% al 40%; si la fragmentación del índice es superior al 40%, es mejor reconstruirla.

La reconstrucción de un índice requiere más recursos, produce bloqueos y ralentiza el rendimiento (si elige mantener la tabla en línea). Entonces, necesitas encontrar el momento adecuado para ese proceso.

6

REBUILD bloquea la tabla durante todo el período de funcionamiento (que puede ser horas y días si la tabla es grande).

REORGANIZE no bloquea la mesa.

Bien. en realidad, coloca algunos bloqueos temporales en las páginas con las que funciona ahora mismo, pero se eliminan tan pronto como se completa la operación (que es fracciones de segundo para cualquier bloqueo dado).

Como @Andomar notado, hay una opción en REBUILD un índice en línea, que crea el nuevo índice, y cuando la operación se completa, simplemente reemplaza el índice anterior por el nuevo.

Esto, por supuesto, significa que debe tener espacio suficiente para conservar tanto la copia antigua como la nueva del índice.

REBUILD es también una operación DML que cambia las tablas del sistema, afecta a las estadísticas, habilita los índices desactivados, etc.

REORGANIZE es una operación de limpieza pura que deja todo el estado del sistema tal como está.

+0

Las versiones empresariales de Sql Server pueden reconstruir índices sin bloquear la tabla, consulte RECONSTRUIR CON (ONLINE = ON) http://blogs.techrepublic.com.com/datacenter/?p=249 – Andomar

-1

índice de reconstrucción reconstruye uno o más índices para una tabla en la base de datos espaciada. reorganizado - desfragmentar los índices agrupados y secundarios de la tabla espaciada hte

+1

¡Corrija esto para que sea inteligible! –

1

Reconstruir dropeando los índices actuales y recreando los nuevos.

Reorganizar es como poner la casa en orden con lo que ya tienes.

es una buena práctica usar una fragmentación del 30% para determinar la reconstrucción frente a la reorganización.

< 30% reorganizar vs> 30% reconstruir

0

Además de las diferencias mencionadas anteriormente (básicamente reconstruir creará el índice de nuevo, y luego "intercambiarlo en" de la ya existente, en lugar de tratar de arreglar el existente), una consideración importante es que una reconstrucción, incluso una reconstrucción de Enterprise ONLINE, interferirá con las transacciones de aislamiento de instantáneas.

TX1 comienza transacción de instantánea
TX1 lee de T

TX2 reconstruye índice en T
TX2 reconstrucción completa

TX1 leer de T de nuevo:

error 3961, la transacción de aislamiento de instantánea falló en la base de datos porque el objeto al que accedió la declaración ha sido modificado por una declaración DDL en otra transacción simultánea desde el inicio de esta transacción. No se permite porque los metadatos no están versionados. Una actualización simultánea de los metadatos puede provocar incoherencias si se combina con el aislamiento de instantáneas.

Cuestiones relacionadas