我在SQL Server的一个表中插入了大约700万行。这个表大约有9-10列,在2个键(列)上有一个clustered index,另外还有3个unclustered indexes.。我正在尝试进行高性能/批量数据插入,但在插入300万条记录后,速度变得相当慢,磁盘使用率达到99%。以下是我为加速此过程所做的工作:
1)禁用所有非聚集索引。我没有禁用2列聚集索引,因为在禁用聚集索引后不能插入数据?
2)我使用C# SqlBulkCopy每次大容量插入5,000条记录。
3)表没有任何约束和触发器
我应该做些什么来加快这个数据插入过程?
发布于 2013-06-11 00:39:06
去掉所有的索引。每次在索引打开的情况下写入时,在写入每条记录时都必须重新构造物理页。使用代码(DROP INDEX)转储所有索引,插入数据,然后使用代码(CREATE INDEX)重新构建索引。
发布于 2013-06-11 00:36:26
确保数据库处于大容量日志记录或简单恢复模式,至少在插入所有记录之前是这样。这将防止事务日志文件膨胀。
发布于 2013-06-11 01:06:06
正如spender所说,你的集群索引可能是个问题。您插入数据的方式可能会使您的集群索引不排序。因此,SQL server必须创建大量只包含一个条目的页面,并在看到大量稀疏填充的数据包后进行优化。尝试使用自动生成的int索引。如果无法做到这一点,请在将整个大容量数据插入SQL之前对其进行排序(基于聚集索引列,顺序很重要)。这将最大限度地减少磁盘使用。
https://stackoverflow.com/questions/17028674
复制相似问题