2011-12-20 108 views
0

我将大约200万条记录插入到SQL Server 2005表中。该表当前具有聚簇以及非聚簇索引。我想改善该表中插入查询的性能。任何人都可以有想法将大量数据插入到SQL Server 2005表中

+1

另外,你目前如何插入数据?你在使用批量插入吗?你使用INSERT语句吗?你一次插入一行还是一次插入多行? – 2011-12-20 12:09:01

+1

@TobyAllen:我们确实知道这是作业吗? – 2011-12-20 12:31:51

+0

我正在使用SQL Server 2005数据库系统。我没有使用批量插入我正在使用insert into table_name语句,并且当前一次插入多行。 – 2011-12-20 12:48:50

回答

1

你可以尝试在插入之后禁用索引并在之后再次启用它们。如果您要将大量数据插入表中,它可能会是一个巨大的时间片。

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

2
  1. 删除所有索引(包括主,如果你对插入的数据 不使用相同的密钥预序)
  2. 插入数据
  3. 重新创建所有删除的索引
+4

如果您在谈论SQL Server:我会建议**不要**放弃聚集索引!否则,在插入之前,表将转换为堆,然后在插入后返回到聚簇表中 - 这两者都是极其耗费时间和资源的操作... – 2011-12-20 12:11:43

+0

是的,同意,但只有当表格中已经有大量数据时 – 2011-12-20 12:23:08

+0

删除或禁用索引,然后再重新创建或重新构建索引会消耗更多时间。因为该表已经包含记录,我已经试过这个东西,但它不会使我受益 – 2011-12-20 12:45:27

1

如果您不使用批量插入没有很好的理由,我会说,你最好Ø要做到这一点。即:选择行格式,然后可以批量重新插入。

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

如果批量插入不是一个选项,您可以通过将插入分割成块来赢得一点 - 这样您就不会逐行移动,但不要尝试插入并更新它所有的一举一举。

我已经尝试了一下自己,但还没有时间去接近最终的答案。 (出于同样的原因,我开始提问Performance for RBAR vs. set-based processing with varying transactional sizes)。

-2

您可以在一个插入中最多插入1000行。

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

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

使用带(保持锁定)

0

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