我的SQL Server数据库有一个奇怪的问题。
我正在使用SqlBulkCopy.WriteToServer
编写批量数据(大约90,000行),我还使用EF AddRange
编写了大约1,000个批量的30,000行。
这会导致这些表上的索引不同步,查询会比通常更长的因素(10分钟后超时,而不是几秒后的结果)。
手动重建索引后,查询再次快速,直到发生其他导入。
我对批量加载的理解是它还应该更新索引。 我的问题是:这种行为有一个众所周知的原因吗?如果没有,我怎么能解决这个问题?
答案 0 :(得分:2)
几年前我们有完全相同的问题。正如dfundako所说,答案是过时的统计数据。 如果更改了某个百分比的记录,则默认情况下SQLServer会更新统计信息。如果您的表具有大量记录,则这是一个问题,因此90000个添加的记录将无法达到所需的已更改行数百分比。 因此,如果您想确定,在插入后,您可以重新索引表格(如您所做)或更新表格的统计信息
update statistics <your table>
答案 1 :(得分:0)
根据这里的评论和答案,我试图弄清楚我是否能以某种方式改变20%的门槛 事实上,使用trace flag 2371
可以做到这一点您可以这样启用它:
DBCC TRACEON(2371, -1)
我现在要等几周,以确定这解决了问题,但我对它抱有很大希望。