我们的 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
搜索区分大小写
您的相对性能会很差,因为原始查询在 PERSON_NAME
上使用索引。 但是,当您应用函数时,Oracle 将不再使用该索引。
如果这是您需要经常执行的操作(如您所建议的(,则可以在函数上创建索引:
CREATE INDEX idx_person_upper_personname ON PERSON(UPPER(PERSONNAME));
然后,当您在 WHERE
子句中使用函数 UPPER(PERSON)
时,Oracle 将使用此索引。