在 WHERE 中使用 Oracle 内置的 UPPER 函数会导致 SELECT 语句性能不佳



我们的 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 将使用此索引。

相关内容

  • 没有找到相关文章

最新更新