Hitachi

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


3.4.2 FULL SCANの対策

〈この項の構成〉

(1) FULL SCANとは

FULL SCANとは,インデクスを使用した検索方法(INDEX SCANまたはKEY SCAN)で,インデクスのすべてのリーフページがサーチ対象となるため,効率が悪いです。

図3‒13 FULL SCANの処理方式

[図データ]

(2) 確認方法

FULL SCANの確認方法を次に示します。

(3) 対策方法

FULL SCANになる要因について,次の表に示します。

表3‒5 FULL SCANの要因

項番

要因

HiRDB SQL Tuning AdvisorのガイダンスメッセージID

UAP統計レポートの表示

1

インデクス第1構成列のサーチ条件が最小値から最大値である

インデクスの第1構成列に対する探索条件が指定されていない場合

KFPX29604-I

KFPX29985-I

「SearchCnd」の行が次に示す内容を含む場合

  • 「RANGE」と行の末尾に「(FULL SCAN)」

  • 「RANGES」と行の末尾に「(FULL SCAN)」

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になっています。次のどちらかの対策方法を検討してください。

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

対策方法

説明

SQL文の変更

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

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

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

新しいインデクスの追加

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

(b) インデクスを定義した列に対してスカラ演算を使用した探索条件を指定した場合

インデクスを定義した列に対して,スカラ演算を使用した探索条件を指定すると,インデクスのサーチ条件がないアクセスパスとなり,FULL SCANになります。スカラ演算を行わないようSQL文を修正してください。

表3‒7 スカラ演算を使用した探索条件と対策方法の例

スカラ演算を使用した探索条件

対策後の探索条件

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構成列であるインデクス