最近、5億行に近いテーブルにNULL可能ビット列を追加しました。列にはデフォルトはありませんが、すべての挿入で0または1の値が指定されています。1回限りのルーチンを実行して、既存のすべての行に0または1を割り当てます(小さなバッチで行を更新します)。これで、すべての行の列に0または1が表示されます。
ビット列をnull不可にしたいのですがALTER TABLE t1 ALTER COLUMN c1 bit not null
、で実行しようとしたときに3分実行され、テーブルへのすべての読み取りをブロックしていたため停止しましたが、完了するまでに時間がかかると思われました。それほど時間がかからない可能性はありますが、利用できないリスクを冒すことはできません。ロールバック自体は6分かかりました。
完了するまでに何時間もかかることなく、列をnull不可にする方法について提案はありますか? さらに、ALTER TABLE ALTER COLUMN
開始してからキャンセルしたステートメントが完了するまでにかかる時間を見積もる方法はありますか?
SQL Server 2017 Web Editionを使用しています。
SELECT c1, count(*) FROM t1 GROUP BY c1
実行に約9分かかりました。その後の実際のALTER TABLE ALTER COLUMN
ステートメントは、完了するのに25分かかりました。悪くない。