Я знаю, что INSERT для таблицы SQL может быть медленным по ряду причин:
- Наличие INSERT TRIGGER на столе
- Множество принудительных ограничений, которые необходимо проверить (обычно внешние ключи)
- Страница разделяется в кластеризованном индексе, когда строка вставляется в середину таблицы
- Обновление всех связанных некластеризованных индексов
- Блокировка от другой активности на столе
- Плохое время отклика ввода-вывода
- ... что я пропустил?
Как я могу сказать, кто отвечает в моем конкретном случае? Как я могу измерить влияние разбиения страниц на обновления некластеризованного индекса и всего остального?
У меня есть сохраненный процесс, который вставляет около 10000 строк за раз (из временной таблицы), что занимает около 90 секунд на 10 000 строк. Это недопустимо медленно, так как это приводит к превышению времени ожидания других движений.
Я посмотрел на план выполнения и увидел задачу INSERT CLUSTERED INDEX и все INDEX SEKKS из запросов FK, но он все еще не говорит мне наверняка, почему это занимает так много времени. Никаких триггеров, но в таблице есть несколько FKeys (которые, похоже, правильно проиндексированы).
Это база данных SQL 2000.