Добавление столбца в таблицу в Sql Server занимает много времени

#sql #sql-server

#sql #sql-server

Вопрос:

Я хочу добавить новый столбец в таблицу Sql Server, содержащую около 20 000 строк, используя этот запрос

 ALTER TABLE [db].[dbo].[table] 
ADD entry_date date;
 

результат запроса все еще работает, до сих пор он занимает 10 минут и все еще работает, это нормально!

Комментарии:

1. Операция требует эксклюзивного доступа к таблице. Возможно, операция заблокирована другой активностью. Запустите sp_who2 , чтобы проверить блокировку.

Ответ №1:

10 минут кажутся долгим временем, но добавление столбца требует времени.

Почему? Добавление столбца (как правило) требует изменения макета таблицы на страницах, где хранятся данные. В вашем случае дата ввода составляет 4 байта, поэтому каждую строку необходимо расширить на 4 байта — и поместить на одну страницу данных.

Добавление столбцов обычно требует перезаписи всех данных.

Также обратите внимание, что при этом также задействуются блокировки и транзакции. Таким образом, если другие действия на сервере связаны с доступом к таблице (в частности, с изменением данных), то это также влияет на производительность.

О, я упоминал, что индексы также задействованы? Индексы заботятся о физическом расположении данных.

Все это говорит о том, что 10 минут кажутся долгими для 20 000 строк. Вы можете обнаружить, что все идет намного быстрее, если вы это сделаете:

  • Создайте новую таблицу с нужными вам столбцами, но без индексов, кроме первичного ключа или кластеризованного индекса.
  • Вставьте данные из существующей таблицы.
  • Добавьте любые индексы и триггеры, которые вы хотите.

Конечно, вы должны быть осторожны, если у вас есть identity колонка.

Комментарии:

1. Спасибо, я обнаружил, что на другом сервере используется таблица, в которую я хочу добавить поле 🙂 Спасибо за вашу помощь