私たちのデータベースには、多かれ少なかれこのように見える大きなテーブルが存在します:
CREATE TABLE dbo.production_data
(
pd_id BIGINT PRIMARY KEY,
serial NVARCHAR(16) NOT NULL UNIQUE,
...
);
しかし、シリアルフィールドのサイズが小さくなったので、32に変更します。VisualStudioスキーマ比較ツールは、次の方法でこれを行うことを提案しています。
DROP INDEX ux_production_data_serial ON dbo.production_data;
GO
ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL;
GO
CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC);
これは本当に必要ですか?またはこれを行う超保存方法のように?
また、一意のインデックスを再作成すると、テーブルがロックされますか?これは大きな問題になるでしょう(テーブルに3,000万行あり、インデックスの再作成にはかなり時間がかかると考えられるため)。これは、次のメンテナンスウィンドウが数か月先になるためです。私の選択肢は何ですか?
インデックスを削除して再作成する必要はありません。
使うだけ
_ALTER TABLE dbo.production_data
ALTER COLUMN serial NVARCHAR(32) NOT NULL;
_
これはメタデータのみの変更です。
列をNVARCHAR(16)
からNVARCHAR(32)
に変更しても、ストレージにはまったく影響しません。
逆に(NVARCHAR(32)
からNVARCHAR(16)
に)進むと、オブジェクトが列に依存しているというエラーが発生しますが、Visual Studioは常に、 実際にが必要かどうかを確認します。