ヒストグラム統計フィルター係数
ヒストグラム統計が使用可能な場合、Db2 では、値の分布を大きな範囲にわたって正確に補間することができます。
RUNSTATSは、通常、単一列または単一の複数列データ・セットについて頻度統計を収集します。 カタログ・スペースとバインド時のパフォーマンスの問題により、1 つまたは複数のターゲット列で検出されるすべての特殊値でのこれらのタイプの統計の収集が非常に非現実的になるので、このような頻度統計は一般に、最も頻度の高い値または最も頻度の低い値、したがって最も偏った値のみで収集されます。
ただし、このような制限のある統計は、多くの場合、値の分布を正確に予測しません。これは、値の範囲全体で大ざっぱな補間が必要であるからです。 例えば、EMPLOYEE 表の YRS_OF_EXPERIENCE 列に、次の値頻度が含まれているとします。
| 価値 | 頻度 |
|---|---|
| 2 | 10% |
| 25 | 15% |
| 26 | 15% |
| 27 | 7% |
| 12 | 0.02% |
| 13 | 0.01% |
| 40 | 0.0001% |
| 41 | 0.00001% |
ヒストグラム統計のメリットがある述部例
この表の値の述部例には、次のものがあります。
- 値が一致しない等価述部:
SELECT EMPID FROM EMPLOYEE T WHERE T.YRS_OF_EXPERIENCE = 6; - 範囲述部:
SELECT T.EMPID FROM EMPLOYEE T WHERE T.YRS_OF_EXPERIENCE BETWEEN 5 AND 10; - 非ローカル述部:
SELECT T1.EMPID FROM EMPLOYEE T1, OPENJOBS T2 WHERE T1.SPECIALTY = T2.AREA AND T1.YRS_OF_EXPERIENCE > T2.YRS_OF_EXPERIENCE;
上記の各述語について、単一の値の分布統計は、Db2が、値の範囲の収集されていない部分でのフィルター係数の均一な補間以外の方法で、述語の選択性を推定するのに役に立ちません。 このような補間の結果、見積もりが不正確になり、不適切なアクセス・パス選択が行われる可能性があります。
Db2がヒストグラム統計を使用する方法
Db2は、各間隔にデータ・セットの行のほぼ同じパーセンテージが含まれるように、いくつかの間隔を作成します。 RUNSTATS の HISTOGRAM オプションを使用する場合、間隔数は NUMQUANTILES の値で指定されます。 各間隔には、ID 値 QUANTILENO、および間隔を制限する値 (LOWVALUE および HIGHVALUE 列) があります。 Db2 各間隔の分布統計を収集します。
RUNSTATS を使用して、このような広範囲の頻度値を含む列で統計を収集する場合は、HISTORGRAM オプションを指定して、値の範囲全体で値の分布を明らかにする、細分性の高い分散統計を収集してください。 以下の表は、従業員表の経験年数値のヒストグラム統計を収集した結果を示しています。 この例では、統計は 7 つの間隔で収集されています。
| QUANTILENO | LOWVALUE | HIGHVALUE | CARDF | FREQUENCYF |
|---|---|---|---|---|
| 1 | 0 | 3 | 4 | 14% |
| 2 | 4 | 15 | 8 | 14% |
| 3 | 18 | 24 | 7 | 12% |
| 4 | 25 | 25 | 1 | 15% |
| 5 | 26 | 26 | 1 | 15% |
| 6 | 27 | 30時間まで | 4 | 16% |
| 7 | 35 | 40 | 6 | 14% |