Сводка: у меня есть таблица, заполненная следующим образом:
insert into the_table (...) select ... from some_other_table
Выполнение вышеуказанного запроса с помощью нет первичного ключа на таблице составляет ~ 15 раз быстрее, чем запуск с первичного ключа, и я не понимаю, почему.
Детали. Я думаю, это лучше всего объяснить с помощью примеров кода.
У меня есть таблица:
create table the_table (
a int not null,
b smallint not null,
c tinyint not null
);
Если я добавляю первичный ключ, этот запрос на ввод очень медленный:
alter table the_table
add constraint PK_the_table primary key(a, b);
-- Inserting ~880,000 rows
insert into the_table (a,b,c)
select a,b,c from some_view;
Без первичного ключа один и тот же запрос вставки примерно в 15 раз быстрее. Однако, после заполнения таблицы без первичного ключа, я могу добавить ограничение первичного ключа, и это займет всего несколько секунд. Мне это действительно не имеет смысла.
Дополнительная информация:
- Оценочный план выполнения показывает 0% общего времени запроса, затраченного на вставку кластерного индекса.
- Версия для разработчиков SQL Server 2008 R2, 10.50.1600
Любые идеи?