Отключить первичный ключ и снова включить после массовой вставки SQL

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

ПРИМЕЧАНИЕ. Это касается множества таблиц, поэтому я предполагаю, что мне нужен какой-то цикл, чтобы получить информацию о первичном ключе и выполнить следующее, чтобы удалить ее, но я не уверен в ее воссоздании:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1

person Jon    schedule 01.06.2010    source источник


Ответы (1)


Кластерные индексы IIRC нельзя отключить, поскольку они определяют, где фактические данные хранятся на страницах.

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

person codingbadger    schedule 01.06.2010
comment
У меня сложилось впечатление, что отключение индексов перед огромными вставками и их повторное включение после этого было бы лучшим процессом. - person Jon; 01.06.2010
comment
Да, для некластеризованных индексов, я думаю, это так. Но удаление и повторное создание кластеризованного индекса может оказаться не столь полезным. повторное создание кластеризованного индекса приведет к реорганизации всех данных на уровне страницы? - person codingbadger; 01.06.2010
comment
В кластеризованном индексе данные фактически хранятся внутри индекса, поэтому удаление индекса фактически означает удаление таблицы. Таким образом, удаление кластеризованного индекса означает создание новой таблицы без индекса и копирование всех данных в эту новую таблицу, затем удаление исходной и переименование новой. Довольно процесс. - person Cobusve; 04.06.2010