6.2.1 効率の悪いアクセスパス(FULL SCAN)のチューニング例の説明
インデクスの全範囲をサーチするFULL SCANのアクセスパスを,インデクスのサーチ範囲を絞り込んだアクセスパスに変更するチューニング例を説明します。
- 〈この項の構成〉
(1) 例題の概要
在庫管理表から,ある商品の店舗ごとの在庫数を検索します。
(a) 表およびインデクス定義
在庫管理表の構成と,この表に定義されたインデクスについて,次に示します。
(b) SQL文
実行するSQL文を次に示します。
SELECT 店舗ID,在庫数 FROM 在庫管理表 WHERE 商品ID = ?
(c) データ件数とヒット件数
データ件数とSQL文のヒット件数について,次に示します。
内容 |
件数 |
---|---|
在庫管理表のデータ件数 |
約1,000,000件 |
SQL文のヒット件数 |
約100件 |
(d) アクセスパス
このSQL文のアクセスパスを出力すると,アクセスパス情報のサーチ条件の行に「FULL SCAN」と表示されます。HiRDB SQL Tuning Advisorと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構成列に対する探索条件が指定されていない場合の対策方法について,どの対策方法が採用できるか検討してください。この例での検討結果を次に示します。
対策方法 |
説明 |
検討結果 |
---|---|---|
SQL文の変更 |
第1構成列に対する探索条件の指定が漏れている場合は,追加してください。 |
【不採用】 例題のSQL文は,第1構成列である店舗ID列の探索条件が漏れている訳ではないため,SQL文の変更はできません。 |
インデクス構成列順序の変更 |
=条件など最も絞り込める条件を指定している列を第1構成列にできないか,インデクスの構成列の順序を見直してください。 |
【不採用】 例題のSQL文以外に,店舗ID列だけに探索条件を指定したSQL文を実行するため,インデクス構成列の順序を変更することはできません。 |
新しいインデクスの追加 |
=条件など最も絞り込める条件を指定している列が第1構成列である新しいインデクスの追加を検討してください。 |
【採用】 在庫管理表には主キー以外にインデクスは定義されていないため,新しいインデクスを追加しても,インデクスの数は問題ありません。このため,商品ID列に単一列インデクスを定義することで対策できます。 |
この例では,新しいインデクスを追加して対策します。
(3) チューニング結果
(a) 表およびインデクス定義
商品IDを第1構成列とするインデクス「在庫管理表IDX1」を追加してください。変更後のインデクス定義について,次に示します。
(b) SQL文
変更しません。
(c) アクセスパス
アクセスパスを出力して,新しいインデクス「在庫管理表IDX1」を使用したINDEX SCANに変更されたことを確認してください。
(4) まとめ
このチューニング例のポイントを次に示します。
- [ポイント]
-
-
SQL文の探索条件の内容を考慮して,主キー以外のインデクスも検討してください。
-
複数列インデクスでは,構成列の順序を意識してください。詳細は,マニュアル「HiRDB Version 9 システム導入・設計ガイド」の「インデクス構成列の検討」を参照してください。
-