4

我在 SQL Server 的表中插入了大约 700 万行。该表有大约9-10列,它有clustered index2 个键(列)和另外 3 个键unclustered indexes.高达 99%。这是我为加快此过程所做的工作:

1) 禁用所有非聚集索引。我没有禁用 2 列聚集索引,因为禁用聚集索引后无法插入数据?

2) 我SqlBulkCopy每次使用 C# 批量插入 5,000 条记录。

3) 该表没有任何约束和触发器

我应该做些什么来加快这个数据插入过程?

4

3 回答 3

2

摆脱所有索引。每次使用索引写入时,都必须在写入每条记录时重新构造物理页面。使用代码 (DROP INDEX) 转储所有索引,插入数据,然后使用代码 (CREATE INDEX) 重新构建索引。

于 2013-06-10T16:39:06.203 回答
1

正如 spender 所说,您的集群索引可能是个问题。您可能会以未对集群索引进行排序的方式插入数据。因此,SQL Server 必须创建大量只有一个条目的页面,并在看到大量稀疏填充的数据包时进行优化。尝试使用自动生成的 int 索引。如果您不能这样做,请在将它们插入 SQL 之前对整个批量数据进行排序(基于聚集索引列 - 顺序很重要)。这应该最大限度地减少磁盘使用量。

于 2013-06-10T17:06:06.147 回答
1

确保数据库处于 BULK LOGGED 或 SIMPLE 恢复模式,至少在插入所有记录之前。这将防止事务日志文件膨胀。

于 2013-06-10T16:36:26.150 回答