我有一个复杂的 SQL 查询。查询的简单部分之一如下所示:
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 是一个输入参数(基本上是一个数字)。
由于这些索引,我的 Query 1 运行效率很高。但是查询 2 有一个性能问题,就像在查询 2 中一样,'t2.name' 以 p_in_prefix 为前缀。
我无法为查询 2 创建基于函数的索引,因为 p_in_prefix 是一个输入参数,我不知道在创建索引时它可能包含什么值。在这种情况下如何解决性能问题?任何提示/想法将不胜感激。如果您需要更多信息,请告诉我。谢谢。