Niedawno dodałem kolumnę bitową obsługującą NULL do tabeli, która ma prawie 500 milionów wierszy. W kolumnie nie ma wartości domyślnej, jednak wszystkie wstawki określają wartość 0 lub 1, a ja uruchomiłem jednorazową procedurę, aby przypisać 0 lub 1 do wszystkich istniejących wierszy (aktualizując wiersze małymi partiami). Każdy wiersz powinien mieć teraz 0 lub 1 w tej kolumnie.
Chcę, aby kolumna bitowa nie miała wartości zerowej, jednak gdy spróbowałem to zrobić ALTER TABLE t1 ALTER COLUMN c1 bit not null
, zaczęła działać przez 3 minuty i zatrzymałem ją, ponieważ blokowała wszystkie odczyty w tabeli i podejrzewałem, że jej ukończenie zajmie dużo czasu . Możliwe, że nie zajmie to zbyt długo, ale nie mogłem zaryzykować zbyt dużej niedostępności. Samo wycofanie zajęło 6 minut.
Czy masz jakieś sugestie na temat tego, jak sprawić, by kolumna nie miała wartości zerowej bez wypełnienia jej potencjalnie godzinami? Ponadto czy jest jakiś sposób oszacowania, ile ALTER TABLE ALTER COLUMN
czasu zajęłoby uruchomienie, a następnie anulowanie wyciągu?
Korzystam z programu SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
co trwało około 9 minut. Wypełnienie faktycznegoALTER TABLE ALTER COLUMN
oświadczenia zajęło 25 minut. Nieźle.