まず、列に対して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 にフルテキスト インデックスがあるかどうかはわかりません)。このインデックスは、これらの目的である全文検索のために特別に作成されているため、それを利用できます。もちろん、インデックス構造はかなり精巧であるため、より多くのリソースを消費しますが、それを受け入れる必要があります。