批量插入时索引不同步

时间:2016-03-31 16:03:02

标签: sql-server entity-framework bulkinsert

我的SQL Server数据库有一个奇怪的问题。 我正在使用SqlBulkCopy.WriteToServer编写批量数据(大约90,000行),我还使用EF AddRange编写了大约1,000个批量的30,000行。

这会导致这些表上的索引不同步,查询会比通常更长的因素(10分钟后超时,而不是几秒后的结果)。

手动重建索引后,查询再次快速,直到发生其他导入。

我对批量加载的理解是它还应该更新索引。 我的问题是:这种行为有一个众所周知的原因吗?如果没有,我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:2)

几年前我们有完全相同的问题。正如dfundako所说,答案是过时的统计数据。 如果更改了某个百分比的记录,则默认情况下SQLServer会更新统计信息。如果您的表具有大量记录,则这是一个问题,因此90000个添加的记录将无法达到所需的已更改行数百分比。 因此,如果您想确定,在插入后,您可以重新索引表格(如您所做)或更新表格的统计信息

update statistics <your table>

答案 1 :(得分:0)

根据这里的评论和答案,我试图弄清楚我是否能以某种方式改变20%的门槛 事实上,使用trace flag 2371

可以做到这一点

您可以这样启用它:

DBCC TRACEON(2371, -1)

我现在要等几周,以确定这解决了问题,但我对它抱有很大希望。