J'ai une table dans une base de données SQL Server avec un index cluster sur la clé primaire. Le tableau comporte 1 million de lignes. Si je supprime 10 000 lignes de la table, l'index est-il restructuré pendant l'opération de suppression?
L'opération de suppression fait partie de la procédure stockée. À la fois, plusieurs clients peuvent exécuter la procédure stockée, mais chaque exécution individuelle supprimera son propre ensemble de lignes (identifié de manière unique par la clé primaire). J'obtiens un blocage sur le verrouillage des touches (de type U) lorsque plusieurs clients exécutent la procédure. Le verrou de blocage appartient à une ligne de la même table et ne fait partie d'aucune des transactions exécutées simultanément. Il ne devrait pas y avoir de blocage car chaque exécution tente de supprimer son propre ensemble de lignes. L'escalade des verrous ne se produit pas car elle est désactivée.
Je suppose que l'opération de suppression doit provoquer un rééquilibrage de l'index et, par conséquent, pendant le processus de restructuration, il peut prendre le verrouillage des touches sur n'importe quelle ligne de la table.
J'apprécierais vraiment toute opinion à ce sujet.
la source
Réponses:
Pour répondre à la question dans le titre, si l'arbre B a été rééquilibré lors d'une suppression, la réponse semble être non, du moins dans le cas de test minimal suivant.
La démo suivante exécute les commandes qu'il vaut mieux laisser pour un environnement de test.
Cette démo montre qu'une suppression peut produire un arbre b très déséquilibré, avec pratiquement toutes les données d'un côté.
la source