Gần đây tôi đã thêm một cột bit có khả năng NULL vào một bảng có gần 500 triệu hàng. Không có mặc định trên cột, tuy nhiên tất cả các phần chèn đều chỉ định giá trị 0 hoặc 1 và tôi đã chạy một thói quen một lần để gán 0 hoặc 1 cho tất cả các hàng hiện có (cập nhật các hàng theo lô nhỏ). Mỗi hàng bây giờ sẽ có 0 hoặc 1 trong cột đó.
Tôi muốn làm cho cột bit không thể rỗng, tuy nhiên khi tôi thử thực hiện thông qua ALTER TABLE t1 ALTER COLUMN c1 bit not null
, nó bắt đầu chạy trong 3 phút và tôi đã dừng nó vì nó chặn tất cả các lần đọc vào bảng và tôi nghi ngờ sẽ mất nhiều thời gian để hoàn thành . Có thể nó sẽ không mất nhiều thời gian nhưng tôi không thể mạo hiểm quá nhiều. Bản rollback mất 6 phút.
Bạn có bất cứ đề xuất nào về cách tôi có thể làm cho cột không thể rỗng mà không mất nhiều giờ để hoàn thành không? Ngoài ra, có cách nào để ước tính thời gian ALTER TABLE ALTER COLUMN
tuyên bố tôi bắt đầu và sau đó bị hủy sẽ mất bao lâu để hoàn thành?
Tôi đang sử dụng SQL Server 2017 Phiên bản web.
SELECT c1, count(*) FROM t1 GROUP BY c1
mất khoảng 9 phút để chạy. CácALTER TABLE ALTER COLUMN
tuyên bố thực tế sau đó mất 25 phút để hoàn thành. Không tệ lắm.