4

Oracle には DOMAIN INDEX というものがあることを知っています。どうやってDB2で?

大きなテーブルにステートメントがあります:

SELECT * from TABLE where (upper(COLUMN1) like '%HGW%'))

COLUMN1 の通常の通常の INDEX は、UPPER と LIKE のために役に立ちません。この UPPER および LIKE ステートメントに影響を与え、このクエリの結果を高速に取得する強力なインデックスを作成する構文は何ですか? 例と助けに感謝します。残念ながら、最初の % または 2 番目の % を削除することはできません。

4

1 に答える 1

0

まず、列に対してupperまたはlowerのような関数を実行すると、その列のインデックスは使用されず、RDBMS は完全なテーブル スキャンに頼ります。インデックスを機能させるには、列をそのままにしておく必要があります。平:

SELECT col1 from table where col2+1 = 3

列で関数(加算)を実行しているため、機能しません。そのため、インデックス(存在する場合)はcol2使用されません。したがって、次のように変更する必要があります。

SELECT col1 from table where col2 = 3-1

*第 2 に、パターンがやなどのワイルドカードで始まる場合.、インデックスも使用されません。これは、容易に推測できるように、RDBMS は列の値がどの文字で始まっているかを知る方法がないためです。したがって、次の 2 つの手順があります。

まず、照合順序を変更して、 とfooの両方に一致するようにFoofOoます。そのようupperにして、世話をします。

次に、ワイルドカード部分に注意する必要があります。の前に実際に多くの文字が許可されている場合HG、最善の策はフルテキスト インデックスを使用することです (DB2 にフルテキスト インデックスがあるかどうかはわかりません)。このインデックスは、これらの目的である全文検索のために特別に作成されているため、それを利用できます。もちろん、インデックス構造はかなり精巧であるため、より多くのリソースを消費しますが、それを受け入れる必要があります。

于 2012-10-11T09:38:45.897 に答える