3

複雑な SQL クエリが 1 つあります。クエリの単純な部分の 1 つは次のようになります。

Query 1:
SELECT *
  FROM table1 t1, table2 t2
 WHERE t1.number       = t2.number
   AND UPPER(t1.name)  = UPPER(t2.name)
   AND t1.prefix       = p_in_prefix;


Query 2:
SELECT *
  FROM table1 t1, table2 t2
 WHERE t1.number       = t2.number
   AND UPPER(t1.name)  = UPPER(p_in_prefix || t2.name)
   AND t1.prefix       = p_in_prefix;

table1 に関数ベースのインデックスを (number, UPPER(name)) として持っています。table2 に関数ベースのインデックスを (number, UPPER(NAME)) として持っています。p_in_prefix は入力パラメーター (基本的には数値) です。

これらのインデックスにより、私のクエリ 1 は効率的に実行されます。ただし、クエリ 2 にはパフォーマンスの問題があります。クエリ 2 では、't2.name' の前に p_in_prefix が付いています。

p_in_prefix は入力パラメーターであり、インデックスの作成中に保持される値がわからないため、クエリ 2 の関数ベースのインデックスを作成できません。このシナリオでパフォーマンスの問題を解決するにはどうすればよいですか? ヒント/アイデアをいただければ幸いです。さらに詳しい情報が必要な場合は、お知らせください。ありがとう。

4

1 に答える 1