複雑な 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 の関数ベースのインデックスを作成できません。このシナリオでパフォーマンスの問題を解決するにはどうすればよいですか? ヒント/アイデアをいただければ幸いです。さらに詳しい情報が必要な場合は、お知らせください。ありがとう。