Недавно я добавил битовый столбец, поддерживающий NULL, в таблицу, в которой содержится около 500 миллионов строк. В столбце нет значения по умолчанию, однако для всех вставок указано значение 0 или 1, и я выполнил одноразовую процедуру, чтобы присвоить 0 или 1 всем существующим строкам (обновление строк небольшими партиями). Каждая строка должна иметь 0 или 1 в этом столбце.
Я хочу, чтобы битовый столбец не обнулялся, однако, когда я попытался сделать это через ALTER TABLE t1 ALTER COLUMN c1 bit not null
, он начал работать в течение 3 минут, и я остановил его, потому что он блокировал все чтения в таблице, и я подозревал, что это займет много времени, чтобы завершить , Возможно, это не займет много времени, но я не могу рисковать слишком большой недоступностью. Сам откат занял 6 минут.
Есть ли у вас какие-либо предложения о том, как сделать столбец необнуляемым, чтобы он не занял много времени? Кроме того, есть ли способ оценить, сколько времени ALTER TABLE ALTER COLUMN
займет завершение заявления, которое я начал, а затем отменил?
Я использую SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
что заняло около 9 минут. ФактическоеALTER TABLE ALTER COLUMN
утверждение после этого заняло 25 минут. Не так уж плохо.