Пакетные обновления индекса? - PullRequest
0 голосов
/ 18 августа 2011

Я записываю несколько сотен или, возможно, несколько тысяч строк в набор таблиц за раз, каждая из которых сильно проиндексирована как внутри, так и через индексированные представления.

Как правило,вставки происходят там, где вставленные строки будут смежными в индексе.

Я ожидаю, что эти вставки будут дорогими, но они очень медленные .Я думаю, что часть проблемы с производительностью заключается в том, что индексы обновляются с каждым отдельным INSERT.

Есть ли способ заставить SQL Server откладывать обновление индексов до тех пор, пока я не закончу с моим пакетом вставок, чтобыдеревья индексов нужно будет обновлять только один раз?

Они выполняются как отдельные операторы из-за необходимости показывать пользователю индикатор выполнения во время сохранения и регистрировать любые отдельные проблемы, но все они происходят из одного соединения вC #.Я могу при необходимости разместить их в транзакции, хотя я бы предпочел этого не делать.

1 Ответ

0 голосов
/ 18 августа 2011

Вы оплачиваете стоимость добавления этих строк в индекс тем или иным способом. Если не обновлять индекс во время вставки, это приведет к проблеме с точностью одновременных операторов - любой запрос к этой таблице, использующий какой-либо из индексов, не будет «видеть» новые строки!

Если скорость важна, и время простоя после вставки не является серьезной проблемой, вы можете:

  • Отключить некластеризованные индексы в целевой таблице
  • Инертные
  • Перестройка некластеризованных индексов

Вам, вероятно, следует уточнить еще кое-что о вашем столе:

  • Насколько широкий стол?
  • Сколько индексов?
  • Насколько широки индексы?

Если у вас есть 20 индексов и каждый индекс имеет 5 полей, вы действительно обновляете 100 дополнительных полей в строке, что может быстро стать дорогим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...