4

我想知道为什么我的实际行数大于估计的行数?

该表有一个聚集的主键,定义为:

CONSTRAINT [PK_AIRQUALITYTS] PRIMARY KEY CLUSTERED 
(
 [FeatureID] ASC,
 [ParameterID] ASC,
 [MeasurementDateTime] DESC
)

在此处输入图像描述

虽然我也更新了MeasurementDateTime列和重建索引的统计信息。


问题:

  • 为什么实际行数大于估计行数?它对性能有什么影响吗?

  • 我是否应该始终尝试使实际行数等于估计的行数?或者实际和估计的行数有多少变化不应该打扰我们?

4

2 回答 2

0

Q1:这取决于这张表总共有多少行。因为这就是 SQL 在构建执行计划时决定使用哪些操作的方式。AFIK,如果 SQL 查询优化器估计需要检索大约 1/3 或更多的表/索引,则 SQL 查询优化器将决定使用 SCAN over SEEK 操作 [关于 SO 的基数估计问题]

所以简短的问题是:这取决于具体情况。

Q2:一般规则是尝试仅优化您知道存在性能问题的查询。

于 2016-10-31T09:54:17.887 回答
-2

两个主要原因:

  1. 统计数据过期
  2. 使用了错误的缓存计划

关于 2,这通常是由于参数嗅探问题,而这又是由于某些类型的查询造成的。

我们不知道您的工作负载是什么 - 查询或存储过程。

如果您使用的是过时的计划,有很多方法可以解决,还有很多方法可以清除它,它们都在谷歌上。

于 2016-10-31T10:24:57.580 回答