スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)
HiRDBは,ある表にインデクスが複数作成されている場合,表の検索で指定された探索条件を基にして,最もアクセスコストの少ないインデクスを選択します。このようにインデクスを選択する処理をコストベースの最適化といいます。
HiRDBが見積もるアクセスコストを次に示します。
HiRDBはコストベースの最適化をするため,表の検索性能が良くなります。特に,複雑な探索条件を指定したSQL文を実行する場合でも,表の検索性能を低下させません。
HiRDBはコストベースの最適化をするため,HiRDBが使用するインデクスの優先順位を意識しないでUAPを作成できます。ただし,UAPからアクセスする表に対してどのようにインデクスを作成しておくかについては,あらかじめ検討する必要があります。
コストベースの最適化を考慮するには,HiRDBが使用するインデクスの優先順位を考慮してインデクスを作成します。このとき,次に示す単一列インデクスと複数列インデクスの使い分け,複数のインデクスの使用及びインデクスの数が性能に与える影響も考慮してください。
HiRDBが使用するインデクスの優先順位を次の表に示します。
表13-2 HiRDBが使用するインデクスの優先順位
優先順位 | HiRDBが優先して使用するインデクスの内容 | インデクスがある列(C1)に対する条件の指定例 |
---|---|---|
1 (必ず使用する※1) |
インデクス型プラグイン専用関数の条件が 「IS TRUE」であり,この関数の第一引数の列に指定したプラグインインデクス |
contains(C1,'…') IS TRUE |
構造化繰返し述語の探索条件に含まれるすべての列をインデクス構成列に含むインデクス | ARRAY(C1,C2)[ANY] (C1='ABC' and C2=10) C1,C2の複数列インデクスを定義しています。 |
|
2 | プラグイン提供関数の条件が「IS TRUE」であり,この関数の第一引数の列に指定したプラグインインデクス | within(C1,'…') IS TRUE |
3 | 「=」の制限条件の対象になる列にある,UNIQUEを指定したインデクス | C1=100 |
4 | 「=」の制限条件の対象になる列にあるインデクス | C1=100 |
5 | 「IS NULL」の制限条件の対象になる列にあるインデクス※2 | C1 IS NULL |
6 | LIKE述語,又はSIMILAR述語のパターン文字列に定数で「%」による前方一致比較を指定した列にあるインデクス | C1 LIKE 'ABC%' C1 SIMILAR TO 'ABC%' |
7 | LIKE述語,又はSIMILAR述語のパターン文字列に定数で上記以外の前方一致比較を指定した列にあるインデクス | C1 LIKE 'ABC_' C1 SIMILAR TO 'ABC_' |
8 | IN述語の制限条件の対象になる列にあるインデクス | C1 IN(10,20,30) |
9 | BETWEEN述語の制限条件の対象になる列にあるインデクス | C1 BETWEEN 20 AND 40 |
範囲条件を指定した列にあるインデクス | 20<=C1 AND C1<=40 | |
10 | 外への参照がない副問合せを使用したIN述語の制限条件の対象になる列にある単一列インデクス | C1 IN(SELECT C1 FROM T2) |
外への参照がない副問合せを使用した限定述語「=ANY」又は「=SOME」の制限条件の対象になる列にある単一列インデクス | C1=ANY(SELECT C1 FROM T2) C1=SOME(SELECT C1 FROM T2) |
|
11 | >,>=,<及び<=の制限条件の対象になる列にあるインデクス | C1>50 C1<=200 |
12※3 | スカラ演算(システム定義スカラ関数,IS_USER_CONTAINED_IN_HDS_GROUPは除く)を指定した列にあるインデクス※2 | length(C1)=10 |
13 | NOT BETWEEN述語の制限条件の対象になる列にあるインデクス | C1 NOT BETWEEN 10 AND 30 |
14 | XLIKE述語及び上記以外のLIKE述語,又はSIMILAR述語の制限条件の対象になる列にあるインデクス | C1 XLIKE '%ABC%' C1 LIKE '%ABC%' C1 SIMILAR TO '%ABC%' |
15 | 集合関数(MIN又はMAX)の引数に指定した列にあるインデクス※4 | MIN(C1) MAX(C1) |
16 | 結合条件列及びグループ分け又はソートの対象になる列にあるインデクス | ORDER BY C1 |
− | 否定(NOT BETWEENを除く)の制限条件の対象になる列にあるインデクス | C1 NOT LIKE '%ABC%' C1 IS NOT NULL |
上記以外の限定述語「ANY」又は「SOME」の制限条件の対象になる列にあるインデクス | C1>=ANY(SELECT C1 FROM T2) C1>SOME(SELECT C1 FROM T2) |
|
限定述語「ALL」の制限条件の対象になる列にあるインデクス | C1>ALL(SELECT C1 FROM T2) | |
プラグイン提供関数の条件が「IS FALSE」又は 「IS UNKNOWN」であり,この関数の第一引数の列に指定したプラグインインデクス |
within(C1,'…') IS FALSE |
表13-3 ナル値を除外キーとするインデクスの使用有無
構成列に指定する制限条件 | 使用有無 | |
---|---|---|
IS NULL,VALUE,CASE式,BIT_AND_TEST | IS NULL,VALUE,CASE式,BIT_AND_TEST以外※1 | |
指定あり | 指定あり | 使用します |
指定あり | 指定なし | 使用しません |
指定なし | 指定あり | 使用します※2 |
指定なし | 指定なし | 使用しません※3 |
「表13-2 HiRDBが使用するインデクスの優先順位」に示すインデクスの優先順位でインデクスを作成しておくと,この優先順位でSQL文中に指定した探索条件での絞り込みの効果が期待できます。なお,優先順位の高いインデクスを作成していても,コストベースの最適化によってHiRDBがコストが高いと判断すると,このインデクスが使用されないことがあります。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.