J'ai une procédure stockée qui tronque certaines tables avec environ 1,75 million de lignes dans chacune, avant d'insérer de nouvelles données (basées sur les données d'autres tables, calculs, etc.)
Le plan de base est très simple:
- Tronquer les tableaux
- Insérez 1,75 million de lignes dans des «lots» d'environ 75 000 à la fois.
Je me demande si je devrais explicitement reconstruire les index à tout moment dans ce processus? par exemple
- Tronquer les tableaux
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[ou quelque chose de similaire]- Insérer 1,75 million de lignes
ou peut-être
ALTER INDEX ALL ON xxx DISABLE
- Tronquer les tableaux
- Insérer 1,75 million de lignes
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[ou quelque chose de similaire]
Toute aide appréciée ... pas un DBA - un Dev qui connaît assez bien la DB est plus précis!
sql-server
performance
index
BlueChippy
la source
la source
insert into
et pour le moment il n'y a pas deorder by
clause, mais je pourrais ajouter que si cela pouvait aider? L'ID et le code sont également indexés séparément.Réponses:
Comme pour la plupart des questions de ce type, cela dépend. Il est peu probable que vous insériez les données dans le "bon" ordre pour tous les index impliqués, ce qui signifie que tous ces index sont susceptibles de rencontrer beaucoup de fractionnement de pages pendant le processus d'insertion. Supposons donc que vous insérez dans un ordre d'index cluster. Vous pouvez désactiver tous les index non clusterisés, tronquer, effectuer votre insertion, puis reconstruire tous vos index non clusterisés. Bien sûr, essayer les deux approches vous dira que la vérité est plus rapide quelle que soit la théorie derrière elle. :)
la source
Plan Basic avec tous les index activés peut être lent et entraîner une fragmentation.
ALTER INDEX REBUILD sur une table tronquée et donc vide ne sert à rien, vous devez donc modifier votre plan A. Il doit être:
Cela peut encore être lent, mais au moins vous obtenez des index nets.
Le plan B est bien. Testez les trois et voyez lequel est le plus rapide et celui qui donne le moins de fragmentation d'index. Décidez ensuite si la reconstruction en vaut la peine.
la source