Création d'un index sur une table très occupée

11

Nous avons une table avec beaucoup de insert\selectchaque fois (comme 100 machines insérant \ mettant à jour chaque seconde).

Quelle est la meilleure façon de créer un index sur une table qui ne peut pas être verrouillé, même pas une seconde?

Si je crée l'index, je suis sûr qu'il verrouillera les demandes, et je ne peux pas le faire.

C'est une grande table avec 1 million de lignes +.

Racer SQL
la source

Réponses:

12

Il n'y a pas une telle option CREATE INDEX WITH (NOLOCK)(et même NOLOCKsur une requête prend des verrous, juste moins que sans l'indice).

Le mieux que vous puissiez faire est de WITH (ONLINE = ON)prendre des verrous au début et à la fin de l'opération (les deux concernant les plans de recompilation liés à la table - voir ce billet de blog de Paul Randal pour plus de détails ).

Cela réduira considérablement l'impact de la création de l'index sur vos applications, mais il n'existe aucun moyen pratique d'éliminer complètement cet impact. De plus, cette fonctionnalité n'est pas gratuite: elle nécessite Enterprise Edition.

Aaron Bertrand
la source