У нашій базі даних існує велика таблиця, яка більш-менш виглядає так:
CREATE TABLE dbo.production_data
(
pd_id BIGINT PRIMARY KEY,
serial NVARCHAR(16) NOT NULL UNIQUE,
...
);
але тепер розмір послідовного поля став низьким, тому я хочу змінити його на 32. Інструмент порівняння схеми Visual Studio пропонує зробити це шляхом:
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);
Це справді потрібно? Або більше схожий на ультразберігаючий спосіб зробити це?
Також, коли відтворювати унікальний індекс, моя таблиця буде заблокована? Тому що це буде великою проблемою (оскільки таблиця містить 30 мільйонів рядків, і я думаю, що відтворення індексу займе досить багато часу), оскільки наступне вікно обслуговування - це кілька місяців у майбутньому. Які мої альтернативи?