Saya baru-baru ini menambahkan kolom bit yang bisa NULL ke tabel yang memiliki hampir 500 juta baris. Tidak ada default pada kolom, namun semua sisipan menentukan nilai 0 atau 1, dan saya menjalankan rutin satu kali untuk menetapkan 0 atau 1 ke semua baris yang ada (memperbarui baris dalam batch kecil). Setiap baris sekarang harus memiliki 0 atau 1 di kolom itu.
Saya ingin membuat kolom bit non-nullable tetapi ketika saya mencoba melakukannya melalui ALTER TABLE t1 ALTER COLUMN c1 bit not null
, itu mulai berjalan selama 3 menit dan saya menghentikannya karena itu memblokir semua bacaan ke meja dan saya menduga itu akan memakan waktu lama untuk menyelesaikannya. . Mungkin saja tidak akan terlalu lama, tetapi saya tidak bisa mengambil risiko terlalu banyak tidak tersedianya. Kembalikan itu sendiri membutuhkan waktu 6 menit.
Apakah Anda memiliki saran tentang bagaimana saya dapat membuat kolom tidak dapat dibatalkan tanpa perlu waktu berjam-jam untuk menyelesaikannya? Selain itu, adakah cara untuk memperkirakan berapa lama ALTER TABLE ALTER COLUMN
pernyataan yang saya mulai dan kemudian batalkan akan selesai?
Saya menggunakan SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
yang membutuhkan waktu sekitar 9 menit untuk berjalan.ALTER TABLE ALTER COLUMN
Pernyataan aktual setelah itu membutuhkan 25 menit untuk selesai. Lumayan.