【问题标题】:Inserting large amount of data into SQL Server 2005 table向 SQL Server 2005 表中插入大量数据
【发布时间】:2011-12-20 12:04:47
【问题描述】:

我将大约 200 万条记录插入到 SQL Server 2005 表中。该表当前具有聚集索引和非聚集索引。我想提高该表中插入查询的性能。任何人都可以了解

【问题讨论】:

  • 另外,您目前如何插入数据?您是否使用批量插入?你在使用 INSERT 语句吗?您是一次插入一行还是一次插入多行?
  • @TobyAllen:我们确定这是作业吗?
  • 我使用的是 SQL server 2005 数据库系统。而且我没有使用批量插入,我正在使用 insert into table_name 语句并且当前一次插入多行..
  • 三个问题:1)你从哪里得到要添加的200万条记录2)你能发布当前的表结构吗? 3) 当前表中有多少条记录?如果您想要具体的答案,这些都是相关的
  • 目前我正在使用选择查询从同一个数据库中提取数据。目前表中约有 1000 万条记录。

标签: sql sql-server-2005 tsql


【解决方案1】:
  1. 删除所有索引(包括主索引,如果您的插入数据是 不是用同一个钥匙预购的)
  2. 插入数据
  3. 重新创建所有删除的索引

【讨论】:

  • 如果您谈论的是 SQL Server:我建议不要肯定删除集群索引!否则,您的表将在插入之前转换为堆,然后在插入之后再转换为聚簇表——这两种操作都是非常耗时和资源密集型的操作......
  • 是的,同意,但前提是表中已经有大量数据
  • 删除或禁用索引,然后再次重新创建或重建索引将消耗更多时间。因为该表已经包含记录,我已经尝试过这个东西,但它对我没有好处
  • 删除 PK 以外的索引会有所帮助。如果您有一个集群 PK 并且可以通过插入上的 PK 对数据进行排序,那么您可以保持集群 PK 没有或很少命中。
【解决方案2】:

您可以尝试在插入之前禁用表上的索引,然后再次启用它们。如果您将大量数据插入表中,这可能会节省大量时间。

查看这篇关于 SQL Server 的文章,了解如何做这样的事情:http://msdn.microsoft.com/en-us/library/ms177406.aspx

【讨论】:

    【解决方案3】:

    如果您没有充分的理由不使用批量插入,我会说您最好的选择是这样做。即:将行选择为您可以批量重新插入的格式。

    通过执行如此数量的普通插入,您会对事务日志造成巨大压力。

    如果批量插入不是一个选项,您可能会通过将插入拆分成块来赢得一点点 - 这样您就不会逐行进行,但不要尝试全部插入和更新一举一动。

    我自己对此进行了一些实验,但还没有时间接近一个决定性的答案。 (出于同样的原因,我开始提问Performance for RBAR vs. set-based processing with varying transactional sizes。)

    【讨论】:

      【解决方案4】:

      您应该删除索引,然后插入数据,然后重新创建索引。

      【讨论】:

        【解决方案5】:

        一次插入最多可以插入 1000 行。

        values (a,b,c), (d,f,h)
        

        通过插入的主键对数据进行排序。

        与(保持锁定)一起使用

        【讨论】:

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