Recientemente agregué una columna de bits con capacidad NULL a una tabla que tiene cerca de 500 millones de filas. No hay un valor predeterminado en la columna, sin embargo, todas las inserciones están especificando un valor de 0 o 1, y ejecuté una rutina única para asignar 0 o 1 a todas las filas existentes (actualizando las filas en lotes pequeños). Cada fila ahora debería tener un 0 o 1 en esa columna.
Quiero que la columna de bits no sea anulable, sin embargo, cuando intenté hacerlo a través de ALTER TABLE t1 ALTER COLUMN c1 bit not null
, comenzó a ejecutarse durante 3 minutos y la detuve porque estaba bloqueando todas las lecturas de la tabla y sospeché que iba a tomar mucho tiempo completarla . Es posible que no tarde demasiado, pero no podría arriesgarme a una gran falta de disponibilidad. El retroceso en sí tomó 6 minutos.
¿Tiene alguna sugerencia sobre cómo puedo hacer que la columna no sea anulable sin que tarde potencialmente horas en completarse? Además, ¿hay alguna forma de estimar cuánto tiempo ALTER TABLE ALTER COLUMN
tardaría en completarse el estado de cuenta que comencé y luego cancelé?
Estoy usando SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
que tardó aproximadamente 9 minutos en ejecutarse. LaALTER TABLE ALTER COLUMN
declaración real después de eso tomó 25 minutos en completarse. No está mal.