我们的Oracle数据库应用程序包含一个名为PERSON
的表。
该表包含名为PERSON_NAME
的列
另外,在此列上还有一个INDEX
可以加快使用此列的SELECT
因此,当我们使用以下SQL语句时,性能很好
SELECT *
FROM PERSON
WHERE 1=1
AND PERSON_NAME = ' Yajli '
;
但是在某些商业情况下
我们需要按
PERSON_NAME
进行搜索时不区分大小写所以我们尝试下面的SQL语句
SELECT *
FROM PERSON
WHERE 1=1
AND UPPER(PERSON_NAME) = UPPER(' YajLi ')
;
但这会导致我们性能不佳,在这种情况下,SELECT查询会花费很多时间
任何帮助如何在两种情况下一起提高
SELECT
的性能*通过
PERSON_NAME
搜索不区分大小写*
PERSON_NAME
搜索区分大小写
最佳答案
您的相对性能会很差,因为原始查询使用
如果这是您需要经常执行的操作(如您建议的那样),则可以在函数上创建索引:CREATE INDEX idx_person_upper_personname ON PERSON(UPPER(PERSONNAME));
然后,当您在PERSON_NAME
子句中使用函数UPPER(PERSON)
时,Oracle将使用此索引。
关于sql - 在WHERE中使用Oracle内置UPPER函数会导致SELECT语句的性能下降吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42113106/