我想知道为什么我的实际行数大于估计的行数?
该表的集群主键定义为:
CONSTRAINT [PK_AIRQUALITYTS] PRIMARY KEY CLUSTERED
(
[FeatureID] ASC,
[ParameterID] ASC,
[MeasurementDateTime] DESC
)
虽然我已在MeasurementDateTime
列更新了STATISTICS并重建了索引。
问题:
为什么实际行数大于估计的行数?它是否有任何性能影响?
我应该总是尝试将实际行数等于估计的行数吗?或者实际和估计的行数有多少变化不应该打扰我们?
答案 0 :(得分:0)
Q1:这取决于此表中总共有多少行。因为这就是SQL如何在构建执行计划时决定使用哪些操作。 AFIK,SQL查询优化器将决定使用SCAN而不是SEEK操作,如果它估计必须检索大约1/3或更多的表/索引[cardinality estimate question on SO]
所以简短的问题是:这取决于具体情况。
Q2:一般规则是尝试仅优化您知道存在性能问题的查询。
答案 1 :(得分:-1)
两个主要原因:
关于2,这通常是由于参数嗅探问题,而这又是由于某些类型的查询造成的。
我们不知道您的工作量是什么 - 查询或存储过程。
如果您使用过时的计划,有许多方法可以解决这个问题,还有很多方法可以将其清除,而且这些方法都在google上。