J'ai récemment ajouté une colonne de bits NULL à une table qui compte près de 500 millions de lignes. Il n'y a pas de valeur par défaut sur la colonne, mais toutes les insertions spécifient une valeur de 0 ou 1, et j'ai exécuté une routine unique pour attribuer 0 ou 1 à toutes les lignes existantes (mise à jour des lignes par petits lots). Chaque ligne doit maintenant avoir un 0 ou 1 dans cette colonne.
Je veux rendre la colonne de bits non nulle, mais lorsque j'ai essayé de le faire via ALTER TABLE t1 ALTER COLUMN c1 bit not null
, elle a commencé à fonctionner pendant 3 minutes et je l'ai arrêtée car elle bloquait toutes les lectures de la table et je soupçonnais que cela prendrait beaucoup de temps. . Il est possible que cela ne prenne pas trop de temps, mais je ne pouvais pas risquer trop d'indisponibilité. Le retour en arrière lui-même a pris 6 minutes.
Avez-vous des suggestions sur la façon de rendre la colonne non annulable sans que cela prenne potentiellement des heures? De plus, existe-t-il un moyen d'estimer la durée de la ALTER TABLE ALTER COLUMN
déclaration que j'ai commencée puis annulée?
J'utilise SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
ce qui a pris environ 9 minutes pour s'exécuter. Il aALTER TABLE ALTER COLUMN
fallu 25 minutes pour terminer la déclaration proprement dite. Pas mal.