まず、列に対してupper
またはlower
のような関数を実行すると、その列のインデックスは使用されず、RDBMS は完全なテーブル スキャンに頼ります。インデックスを機能させるには、列をそのままにしておく必要があります。平:
SELECT col1 from table where col2+1 = 3
列で関数(加算)を実行しているため、機能しません。そのため、インデックス(存在する場合)はcol2
使用されません。したがって、次のように変更する必要があります。
SELECT col1 from table where col2 = 3-1
*
第 2 に、パターンがやなどのワイルドカードで始まる場合.
、インデックスも使用されません。これは、容易に推測できるように、RDBMS は列の値がどの文字で始まっているかを知る方法がないためです。したがって、次の 2 つの手順があります。
まず、照合順序を変更して、 とfoo
の両方に一致するようにFoo
しfOo
ます。そのようupper
にして、世話をします。
次に、ワイルドカード部分に注意する必要があります。の前に実際に多くの文字が許可されている場合HG
、最善の策はフルテキスト インデックスを使用することです (DB2 にフルテキスト インデックスがあるかどうかはわかりません)。このインデックスは、これらの目的である全文検索のために特別に作成されているため、それを利用できます。もちろん、インデックス構造はかなり精巧であるため、より多くのリソースを消費しますが、それを受け入れる必要があります。