17.00 - 17.05 - 派生統計 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

最適化ルーチンは、問合わせの最適化処理を開始する際に、間隔ヒストグラム統計に基づいて初期カーディナリティ見積もりを行ないます。この見積もりは、最適化処理を通じて動的に調整されます。つまり、さまざまなデータベースの制約、問合わせの述部、ハッシュ インデックス、および結合インデックスからの情報を適用することで、この見積もりの精度を向上します。

このような統計を計算する方法から、その統計は派生統計と呼ばれます。派生統計では、計画が最適状態に及ばないと判断されたときに、問合わせ全体を最初から再最適化しなくても、最適化ルーチンの最終結果が、問合わせ中にリクエストを動的に再最適化した場合と同じになります。

派生統計の定義

派生統計はスナップショットであり、基本テーブルの間隔ヒストグラム統計から派生されます。これは、最適化ルーチンがクエリーを最適化する間に、それによって初期化および変換されます。派生統計は、クエリー述部、CHECKおよび参照整合性制約、ハッシュ インデックス、結合インデックスのようなさまざまな制約ソースから変換されるカーディナリティ見積もりであり、クエリー最適化プロセスの各ステップで動的に調整されます。つまり、派生統計は、他のソースから派生したクエリー述部やデモグラフィック情報を適用した後に列値のデモグラフィックを表わします。

保全制約から導出された情報に基づく問合わせの最適化は、一般的に意味的な問合わせ最適化として分類されます。これは、最初は演算的データベースの分野で発展していたものです。意味的な問合わせ最適化では、導出された制約をリクエストに対して加減算することで、より適切な最適化を得ることができます。

例えば、結合プランナーは、単一テーブルの述部の適用後、または結合作成後に、結合列のデモグラフィックを認識する必要があります。この情報すべてが、問合わせ最適化の間に、派生統計インフラストラクチャを使って派生および伝搬され、すべてのコストおよび見積もり公式で一貫して使用されます。

動的AMPサンプルから取得されるカーディナリティの見積もりと関連する間隔ヒストグラムに格納されている統計の比較、基本テーブルとそれをサポートするインデックス間における統計の双方向継承、最新の収集タイムスタンプがあるセットの使用など、派生統計のフレームワークは、古い統計を処理するためのいくつかの技術を採用します。ハッシュ インデックスと結合インデックスによる統計継承を参照してください。

古い統計の詳細については、派生統計を使用した古い統計の補正を参照してください。

双方向継承は、インデックス テーブル ペア内の任意ののデータベース オブジェクトに既存の間隔ヒストグラム統計がないときに、基本テーブルと基礎インデックスが互いに既存の統計を継承し使用する方法を説明するのに使用される用語です。

両方のデータベース オブジェクトに既存の間隔ヒストグラム統計がある場合、最適化ルーチンは、新しく収集した統計のほうがより正確であると仮定し、より新しい収集タイムスタンプがあるセットを使用します。

派生統計の流れ

次のテーブルと結合インデックス定義は、より正確なカーディナリティの見積もりを生成するために、最適化ルーチンによって使用される派生統計の流れを示すクエリーに使用されます。

CREATE TABLE t2 (
  a2 INTEGER PRIMARY KEY,
  b2 INTEGER,
  c2 CHARACTER(1) CHECK (c2 IN ('M', 'F')),
  d2 DATE);

CREATE TABLE t3 (
  a3 INTEGER,
  b3 INTEGER,
  c3 CHARACTER(5),
  d3 INTEGER);

CREATE JOIN INDEX ji_t1 AS
  SELECT a1, d1
  FROM t1
  WHERE b1 > 10
  AND   c1 = 'Teradata');

CREATE JOIN INDEX aji_t3 AS
  SELECT a3, d3, COUNT(*)
  FROM t3
  WHERE b3 < 100
  GROUP BY 1,2);

このトピックで後述するフローチャートは、最適化ルーチンが派生統計を使用して、次の問合わせに対するより正確なカーディナリティを見積もる方法を示しています。ここでは、前述のテーブルと結合インデックスの定義を前提としています。

SELECT *
FROM t1, t2, t3
WHERE b1 > 10
AND   c1 = ‘Teradata’
AND   b3 < 50
AND   d1 = d2
AND   a2 = a3
AND   d2 = d3;

このクエリーについてさまざまな統計を導出するステップは次のとおりです。

  1. 結合インデックス統計を使用して基本テーブル統計を改良および導出します。
  2. 結合テーブルt1とt2は、条件d1=d2を消滅させ、暫定結合関係のR1を生成します。

    d1とd2は、EquiSetにマージされ(各バイナリ結合後の結合述部冗長性を使用した列デモグラフィックの導出を参照)、2つの固有値のカーディナリティの小さい方をMIN(200,1500)、または200として取得します。

    d1およびd2のエントリは、派生統計セットから削除されます。

  3. 暫定結合関係R1がある結合テーブルt3は、条件a2=a3およびd2=d3を消滅させ、結合関係R2について派生統計カーディナリティの次のセットを生成します。
R2  
列セット 固有値の数
(b1) 1000
(c1) 2000
(d1, d2, d3) 200
(a2, a3) 100
(a2, d2) 600
(a3, d3) 600

派生統計のテーブル表現

列見出し 内容
Col 固有値の数が派生統計サブシステムによって導出される列セット
NUV 派生統計サブシステムによって導出される列セットの固有値の数