SQL Server: Quelle est la différence entre la reconstruction d'index et la réorganisation d'index?

Quelle est la différence entre la reconstruction de l'indice et la réorganisation de l'indice?

Pensez à la façon dont l'index est implémenté. C'est généralement une sorte d'tree, comme un tree B + ou un tree B. L'index lui-même est créé en regardant les keys dans datatables, et en construisant l'tree afin que la table puisse être recherchée efficacement.

Lorsque vous réorganisez l'index, vous passez par l'index existant, nettoyant les blocs pour les loggings supprimés, etc. Cela peut être fait (et est dans certaines bases de données) lorsque vous effectuez une suppression, mais cela impose des pénalités de performance. Au lieu de cela, vous le faites séparément afin de le faire plus ou less en mode batch.

Lorsque vous reconstruisez l'index, vous supprimez l'arborescence existante et lisez tous les loggings, en créant une nouvelle arborescence directement à partir des données. Cela vous donne un nouvel tree optimisé, peut- être mieux que les résultats de la réorganisation de la table; il vous permet également de régénérer l'tree s'il a été corrompu.

REBUILD verrouille la table pour toute la période d'opération (qui peut être des heures et des jours si la table est grande).

REORGANIZE ne verrouille pas la table.

Bien. en fait, il place des verrous temporaires sur les pages avec lesquelles il travaille en ce moment, mais ils sont supprimés dès que l'opération est terminée (c'est-à-dire des fractions de seconde pour un verrou donné).

Comme l'a noté @Andomar , il existe une option pour REBUILD un index en ligne, qui crée le nouvel index, et lorsque l'opération est terminée, il suffit de replace l'ancien index par le nouveau.

Cela signifie bien sûr que vous devriez avoir suffisamment d'espace pour conserver l'ancienne et la nouvelle copy de l'index.

REBUILD est également une opération DML qui modifie les tables système, affecte les statistics, active les index désactivés, etc.

REORGANIZE est une opération de nettoyage pur qui laisse tout l'état du système tel quel.

Il y a un certain nombre de différences. Fondamentalement, la reconstruction est une reconstruction totale d'un index – il va build un nouvel index, puis abandonner l'existant, alors que la réorganisation va simplement, bien … il va le réorganiser .

Cette input de blog que j'ai trouvée il y a quelques time va l'expliquer beaucoup mieux que moi. 🙂

Reconstruisez-le en supprimant les index actuels et en en recréant de nouveaux.

La réorganisation est comme mettre la maison en ordre avec ce que vous avez déjà.

il est recommandé d'utiliser une fragmentation de 30% pour déterminer la reconstruction ou la réorganisation.

<30% réorganiser contre> 30% rebuild

"Réorganiser l'index" est un process de nettoyage, d'organisation et de défragmentation du "niveau feuille" de l'tree B (en fait, des pages de données).

La reconstruction de l'index change tout l'tree B, recréant l'index.

Il est recommandé que l'index soit réorganisé lorsque la fragmentation de l'indice est de 10% à 40%; Si la fragmentation de l'index est supérieure à 40%, il est préférable de la rebuild.

La reconstruction d'un index prend plus de ressources, produit des verrous et ralentit les performances (si vous choisissez de garder la table en ligne). Donc, vous devez find le bon moment pour ce process.

En plus des différences ci-dessus (rebuild fondamentalement créera l'index à nouveau, puis "swap" pour l'existant, plutôt que d'essayer de réparer l'existant), une considération importante est qu'une reconstruction – même une reconstruction en ligne Enterprise – interférera avec les transactions d'isolation d'instantanés.

TX1 démarre la transaction d'instantané
TX1 lit à partir de T

TX2 reconstruit l'index sur T
TX2 reconstruction complète

TX1 lit à nouveau T:

Erreur 3961, la transaction d'isolement d'instantané a échoué dans la database parce que l'object accédé par l'instruction a été modifié par une instruction DDL dans une autre transaction concurrente depuis le début de cette transaction. Il est interdit car les métadonnées ne sont pas versionnées. Une mise à jour simultanée des métadonnées peut entraîner des incohérences si elle est mélangée avec l'isolation des instantanés.

rebuild l'index rebuild un ou plusieurs index pour une table dans la database spacified. réorganisé – défragmenter les index clustrés et secondaires de la table hte spacified