【问题标题】:Disable Primary Key and Re-Enable After SQL Bulk InsertSQL 批量插入后禁用主键并重新启用
【发布时间】:2011-02-26 07:17:35
【问题描述】:

我即将在我的数据库中运行大量数据插入。我已经设法弄清楚如何在我的表上启用和重建非聚集索引,但我也想禁用/启用主键,因为我相信这会加快插入过程。

注意:这是在许多表上,所以我假设我需要一些循环来获取主键信息并运行以下命令来删除它,但我不确定是否要重新创建它:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1

【问题讨论】:

    标签: sql sql-server-2005 sql-server-2008 bulkinsert


    【解决方案1】:

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

    我很确定您必须删除密钥并在插入后重新创建它。根据表、索引和插入的大小,这可能不会为您节省任何时间。

    【讨论】:

    • 我的印象是在大量插入之前禁用索引并在之后重新启用它们会是一个更好的过程
    • 是的,我相信它是非聚集索引。但是通过删除和重新创建聚集索引可能不是那么有益。重新创建聚集索引会在页面级别重新组织所有数据?
    • 对于聚集索引,数据实际上存储在索引内部,因此删除索引实际上是删除表。因此删除聚集索引意味着创建一个没有索引的新表并将所有数据复制到这个新表中,然后删除原始表并重命名新表。相当的过程。
    【解决方案2】:
    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' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多