Добавление дополнительного столбца в таблицу
это массивная и неэффективная задача, которую я
не хочу делать, учитывая
влияние, которое это вызовет в другом месте.
Можете ли вы уточнить это?
Добавление столбцов как обнуляемых или со значениями по умолчанию означает, что на самом деле никто не должен будет указывать значения. без воздействия
Если вы беспокоитесь о времени блокировки при добавлении столбца в таблицу, добавьте столбцы в конец таблицы (чтобы SQL Server не создавал новую таблицу, скопируйте данные в удалите старую таблицу и переименуйте новую.) почти не влияет на время выполнения
Добавление 50 миллионов строк данных практически не повлияет на время выполнения?
Пользователь @BrianWhite, похоже, смущен тем, что добавление столбца в таблицу, содержащую 50 миллионов строк, может практически не повлиять на время выполнения. Кажется, он считает, что добавление столбца в большую таблицу является дорогостоящей операцией, которая создаст проблемы для других пользователей, поскольку расширенная операция блокирует пользователей. Кажется, он думает, что добавление столбца заставляет сервер написать 50 миллионов строк:
будет удерживать блокировку таблицы в течение периода времени, необходимого для записи 50 миллионов записей данных
Важным моментом является то, что не запишет 50 миллионов записей данных. Чтобы продемонстрировать это, просто получим таблицу с 28,176,266 строками ( 4,557 МБ ):
--How many rows in the table
SELECT COUNT(*) FROM BigTable
28176266
(1 row(s) affected)
--How big is the table
EXECUTE sp_spaceused 'BigTable'
name rows reserved data index_size unused
-------- -------- ---------- ---------- ---------- ------
BigTable 28176266 4681560 KB 4666984 KB 14536 KB 40 KB
Теперь, когда мы установили, что у меня есть таблица строк 28 миллионов , то есть 4,6 ГБ , давайте добавим столбец к этой таблице:
ALTER TABLE BigTable ADD NewColumn int NULL
Подождите! Вопрос: Сколько времени это займет? Разве это не длинная операция, которая займет блокировку таблицы при создании 28 миллионов записей?
Нет! Давайте посмотрим, сколько времени это займет:
PRINT 'Time before adding the column: '+CONVERT(varchar(50), getdate(), 126)
ALTER TABLE BigTable ADD NewColumn int NULL
PRINT 'Time after adding the column: '+CONVERT(varchar(50), getdate(), 126)
И сколько времени понадобилось, чтобы добавить столбец в таблицу с 28 миллионами строк в 4,6 ГБ?
Time before adding the column: 2012-11-06T14:14:33.493
Time after adding the column: 2012-11-06T14:14:33.503
Ответ: о 10мс
Десять миллисекунды .