Hitachi

ノンストップデータベース HiRDB Version 9 パフォーマンスガイド


6.2.1 効率の悪いアクセスパス(FULL SCAN)のチューニング例の説明

インデクスの全範囲をサーチするFULL SCANのアクセスパスを,インデクスのサーチ範囲を絞り込んだアクセスパスに変更するチューニング例を説明します。

〈この項の構成〉

(1) 例題の概要

在庫管理表から,ある商品の店舗ごとの在庫数を検索します。

(a) 表およびインデクス定義

在庫管理表の構成と,この表に定義されたインデクスについて,次に示します。

図6‒1 表およびインデクス定義

[図データ]

(b) SQL文

実行するSQL文を次に示します。

SELECT 店舗ID,在庫数 FROM 在庫管理表 WHERE 商品ID = ?

(c) データ件数とヒット件数

データ件数とSQL文のヒット件数について,次に示します。

表6‒2 データ件数とヒット件数

内容

件数

在庫管理表のデータ件数

約1,000,000件

SQL文のヒット件数

約100件

(d) アクセスパス

このSQL文のアクセスパスを出力すると,アクセスパス情報のサーチ条件の行に「FULL SCAN」と表示されます。HiRDB SQL Tuning AdvisorとUAP統計レポートのアクセスパス出力結果を次に示します。

図6‒2 HiRDB SQL Tuning Advisorの出力結果(チューニング前)

[図データ]

図6‒3 UAP統計レポートの出力結果(チューニング前)

[図データ]

(2) チューニングの考え方

FULL SCANは効率の悪いアクセスパスのため,対策が必要です。FULL SCANの対策方法は,「FULL SCANの対策」で説明しています。この内容に沿って対策してください。

(a) 要因の特定

まず,FULL SCANになる要因を特定してください。例題のSQL文は,次に示す理由から「インデクスの第1構成列に対する探索条件が指定されていない」ことが要因であることがわかります。

  • HiRDB SQL Tuning Advisorでアクセスパスを出力した場合

    次のガイダンスメッセージが出力されています。

    • KFPX29604-I

    • KFPX29985-I

  • UAP統計レポートでアクセスパスを出力した場合

    「SearchCnd」が「RANGE」で行の末尾に「(FULL SCAN)」と表示されています。

[図データ][主キーとインデクスについて]

在庫管理表には,主キーとして店舗ID列,商品ID列が指定されています。主キーを指定した列には,インデクスが定義されます。この例では複数の列を主キーに指定しているため,店舗ID列が第1構成列,商品ID列が第2構成列である複数列インデクスが定義されます。この例のSQL文では,インデクスの第1構成列である店舗ID列に探索条件が指定されていません。このため,インデクスの全範囲をサーチする「FULL SCAN」のアクセスパスになっています。

(b) 対策方法

第1構成列に対する探索条件が指定されていない場合の対策方法について,どの対策方法が採用できるか検討してください。この例での検討結果を次に示します。

表6‒3 第1構成列に対する探索条件が指定されていない場合の対策方法

対策方法

説明

検討結果

SQL文の変更

第1構成列に対する探索条件の指定が漏れている場合は,追加してください。

【不採用】

例題のSQL文は,第1構成列である店舗ID列の探索条件が漏れている訳ではないため,SQL文の変更はできません。

インデクス構成列順序の変更

=条件など最も絞り込める条件を指定している列を第1構成列にできないか,インデクスの構成列の順序を見直してください。

【不採用】

例題のSQL文以外に,店舗ID列だけに探索条件を指定したSQL文を実行するため,インデクス構成列の順序を変更することはできません。

新しいインデクスの追加

=条件など最も絞り込める条件を指定している列が第1構成列である新しいインデクスの追加を検討してください。

【採用】

在庫管理表には主キー以外にインデクスは定義されていないため,新しいインデクスを追加しても,インデクスの数は問題ありません。このため,商品ID列に単一列インデクスを定義することで対策できます。

この例では,新しいインデクスを追加して対策します。

(3) チューニング結果

(a) 表およびインデクス定義

商品IDを第1構成列とするインデクス「在庫管理表IDX1」を追加してください。変更後のインデクス定義について,次に示します。

図6‒4 表およびインデクス定義

[図データ]

(b) SQL文

変更しません。

(c) アクセスパス

アクセスパスを出力して,新しいインデクス「在庫管理表IDX1」を使用したINDEX SCANに変更されたことを確認してください。

図6‒5 HiRDB SQL Tuning Advisorの出力結果(チューニング後)

[図データ]

図6‒6 UAP統計レポートの出力結果(チューニング後)

[図データ]

(4) まとめ

このチューニング例のポイントを次に示します。

[図データ][ポイント]
  • SQL文の探索条件の内容を考慮して,主キー以外のインデクスも検討してください。

  • 複数列インデクスでは,構成列の順序を意識してください。詳細は,マニュアル「HiRDB Version 9 システム導入・設計ガイド」の「インデクス構成列の検討」を参照してください。