4

実際の行数が推定行数よりも多いのはなぜですか?

テーブルには、次のように定義されたクラスター化された主キーがあります。

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

ここに画像の説明を入力

列のSTATISTICSを更新しMeasurementDateTime、インデックスも再構築しましたが。


質問:

  • 実際の行数が推定行数より多いのはなぜですか? また、パフォーマンスに影響はありますか?

  • 実際の行数と推定行数を常に取得しようとする必要がありますか? または、実際の行数と推定された行数の変動はどのくらいなのでしょうか?

4

2 に答える 2

0

Q1: このテーブルの合計行数によって異なります。これは、SQL が実行計画の構築中に使用する操作を決定する方法だからです。AFIK、SQLクエリオプティマイザーは、テーブル/インデックスの約1/3以上を取得する必要があると見積もった場合、SEEK操作よりもSCANを使用することを決定します[ SOに関するカーディナリティ見積もりの​​質問]

したがって、短い質問は次のとおりです。特定のケースによって異なります。

Q2: 一般的なルールは、パフォーマンスの問題があることがわかっているクエリのみを最適化しようとすることです。

于 2016-10-31T09:54:17.887 に答える
-2

2 つの主な理由:

  1. 統計が古くなっています
  2. 不正なキャッシュ プランが使用されている

2 に関しては、これは多くの場合、特定の種類のクエリが原因であるパラメータ スニッフィングの問題が原因です。

ワークロードがクエリかストアド プロシージャかはわかりません。

古くなったプランを使用している場合に解決する方法はたくさんあり、それを洗い流す方法もたくさんあり、それらはすべて Google にあります。

于 2016-10-31T10:24:57.580 に答える