2010-06-01 67 views
4

我即将在我的数据库中运行大量数据插入。我设法解决了如何在我的表上启用和重建非聚集索引,但我也想禁用/启用主键,因为我相信这会加速插入过程。禁用主键并在SQL批量插入后重新启用

注:这是对大量的表,所以我想我需要一些环获得主键信息,并运行以下砸,但我不知道重新创建:

ALTER TABLE Table1 
DROP CONSTRAINT PK_Table1_Col1 

回答

8

IIRC聚簇索引无法禁用,因为它们控制实际数据存储在页面中的位置。

我敢肯定,你将不得不放弃密钥,并在你插入后重新创建它。根据表的大小,索引和插入可能无法为您节省时间。

+0

我的印象是,禁用之前巨大的插入索引和重新启用之后他们会是一个更好的过程 – Jon 2010-06-01 11:01:03

+4

有非聚簇索引,我相信它是。但通过删除和重新创建聚集索引,它可能不是那么有益。重新创建聚集索引将重新组织页面级别的所有数据? – codingbadger 2010-06-01 11:03:51

+0

使用聚集索引时,数据实际上存储在索引内部,因此删除索引实际上是删除表。 因此,删除聚集索引意味着创建一个不包含索引的新表,并将所有数据复制到此新表,然后删除原始文件并重命名新文件。相当一个过程。 – Cobusve 2010-06-04 16:09:49

4
Run This : 
//For disable all constraint of your all tables 
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
//Your insert query here ...................... 
//After Insert Enable all the constraint 
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'