3.4.2 FULL SCANの対策
- 〈この項の構成〉
(1) FULL SCANとは
FULL SCANとは,インデクスを使用した検索方法(INDEX SCANまたはKEY SCAN)で,インデクスのすべてのリーフページがサーチ対象となるため,効率が悪いです。
(2) 確認方法
FULL SCANの確認方法を次に示します。
-
HiRDB SQL Tuning Advisorの場合
アクセスパス情報の「サーチ条件」の行に「FULL SCAN」と表示されます。
FULL SCANの出力例を次に示します。
図3‒14 HiRDB SQL Tuning Advisorの出力例(FULL SCAN) -
UAP統計レポートの場合
アクセスパス情報の「SearchCnd」の行に「FULL SCAN」と表示されます。
FULL SCANの出力例を次に示します。
図3‒15 UAP統計レポートの出力例(FULL SCAN)
(3) 対策方法
FULL SCANになる要因について,次の表に示します。
項番 |
要因 |
HiRDB SQL Tuning AdvisorのガイダンスメッセージID |
UAP統計レポートの表示 |
|
---|---|---|---|---|
1 |
インデクス第1構成列のサーチ条件が最小値から最大値である |
インデクスの第1構成列に対する探索条件が指定されていない場合 |
KFPX29604-I KFPX29985-I |
「SearchCnd」の行が次に示す内容を含む場合
|
2 |
インデクスのサーチ条件がない |
インデクスを定義した列に対して,スカラ演算を使用した探索条件を指定した場合 |
KFPX29604-I KFPX29984-I |
「SearchCnd」の行に「NONE(FULL SCAN)」と表示 |
3 |
複数列インデクスの各構成列に対する探索条件を,OR論理演算している場合 |
KFPX29604-I KFPX29608-I KFPX29984-I |
「SearchCnd」の行に「NONE(FULL SCAN)」と表示 |
それぞれの要因について,対策方法を説明します。
(a) インデクスの第1構成列に対する探索条件が指定されていない場合
インデクスの第1構成列に対する探索条件が指定されていないため,第1構成列のサーチ条件が最小値から最大値となり,FULL SCANになっています。次のどちらかの対策方法を検討してください。
対策方法 |
説明 |
---|---|
SQL文の変更 |
第1構成列に対する探索条件の指定が漏れている場合は,追加してください。 |
インデクス構成列順序の変更 |
=条件など最も絞り込める探索条件を指定している列を第1構成列にできないか,インデクスの構成列の順序を見直してください。 |
新しいインデクスの追加 |
=条件など最も絞り込める探索条件を指定している列が第1構成列である新しいインデクスの追加を検討してください。 |
(b) インデクスを定義した列に対してスカラ演算を使用した探索条件を指定した場合
インデクスを定義した列に対して,スカラ演算を使用した探索条件を指定すると,インデクスのサーチ条件がないアクセスパスとなり,FULL SCANになります。スカラ演算を行わないようSQL文を修正してください。
スカラ演算を使用した探索条件 |
対策後の探索条件 |
---|---|
C1 + 100 > ? |
C1 > ? - 100 |
SUBSTR(C1,1,3) = 'abc' |
C1 LIKE 'abc%' |
YYYY || MMDD = '20110203' |
(YYYY , MMDD) = ('2011' , '0203') |
(c) 複数列インデクスの各構成列に対する探索条件をOR論理演算している場合
複数列インデクスの各構成列に対する探索条件をOR論理演算している場合,インデクスのサーチ条件がないアクセスパスとなり,FULL SCANになります。探索条件に指定した列が第1構成列であるインデクスを追加して,すべての探索条件でインデクスが利用できるようにします。これによって,複数インデクス利用(OR PLURAL INDEXES SCANまたはAND PLURAL INDEXES SCAN)に変更できます。
次に対策方法の例を示します。
- [例題]
-
-
複数列インデクスの定義列:C1,C2,C3
-
SQL文:SELECT * FROM T1 WHERE C1=? OR C2=? OR C3=?
探索条件に指定した列はすべてインデクスに含まれていますが,探索条件をOR論理演算しています。
-
- [対策方法]
-
次に示すインデクスを追加します。
-
C2が第1構成列であるインデクス
-
C3が第1構成列であるインデクス
-