我们的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在这两种情况下的性能有帮助吗?
* PERSON_NAME搜索不区分大小写
* PERSON_NAME搜索是区分大小写的
发布于 2017-02-08 12:33:06
由于原始查询在PERSON_NAME上使用索引,因此您的相对性能会很差。但是,在应用函数时,Oracle不再使用索引。
如果这是您需要经常做的事情(如您建议的那样),那么您可以为该函数创建一个索引:
CREATE INDEX idx_person_upper_personname ON PERSON(UPPER(PERSONNAME));然后,当您在UPPER(PERSON)子句中使用函数WHERE时,Oracle将使用此索引。
https://stackoverflow.com/questions/42113106
复制相似问题