Я импортирую довольно здоровенный объем данных в базу данных SQL Server. Исходные данные берутся из PgSql (включая таблицы defs), которые я прохожу через некоторое простое регулярное выражение для перевода в TSql. Это создает таблицы без первичного ключа.Является ли добавление первичного ключа причиной реструктуризации базовых данных
Насколько я понимаю, отсутствие первичного ключа/индекса кластеризации означает, что данные хранятся в куче.
После завершения импорта, добавить первичные ключи следующим образом:
ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY (id);
(обратите внимание на отсутствие CLUSTERED
ключевого слова). Что происходит сейчас? Еще куча? Что влияет на поиск по первичному ключу? Разве это действительно отличается от добавления стандартного индекса?
Теперь, вместо того, чтобы сказать, добавить первичные ключи следующим образом:
ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY CLUSTERED (id);
Я принимаю это теперь полностью перестраивает таблицу в основе структуры строк с более эффективного поиска с помощью ПК, но менее желательными характеристиками вставки.
Являются ли мои предположения правильными?
Если мой импорт вставляет данные в заказ PK, есть ли какая-либо польза для отказа от ПК в первую очередь?
Вы хотите вставить строки, а затем вы хотите добавить PK? –
Я тоже могу это сделать, но учитывая объем данных, я бы лучше понял, что происходит, чем потратить 5-8 часов на тестирование разных сценариев. Я могу либо добавить ключи до, либо после, но вставляются ** ** в порядке PK. – spender
INSERT * должен быть * быстрее, если таблица целей - HEAP. Но общая (вставка, обновление, удаление, выбор) производительности для таблицы HEAP, которая имеет ПК (не кластерная), должна быть хуже производительности для кластеризованной таблицы. Взгляните на эту статью [SQL Server Best Practices Article] (http://technet.microsoft.com/en-us/library/cc917672.aspx). И если вы импортируете большой объем данных, вы должны взглянуть на [разбиение на таблицы (SQL2005 +)] (http://msdn.microsoft.com/en-US/library/ms345146%28v=SQL.90%29#sql2k5parti_topic24). –