首页 > 解决方案 > Oracle REGEXP_LIKE 函数使用索引表扫描?

问题描述

我正在使用 regexp_like 函数来搜索列上的特定模式。但是,我看到这个查询没有采用在该列上创建的索引,而是进行全表扫描。是否有任何选项可以为 regexp_like 创建基于函数的索引,以便我的查询将使用该索引?在这里,模式 SV4889 不是常量表达式,而是每次都会变化。

select * from test where regexp_like(id,'SV4889')

标签: sqloracleindexingregexp-like

解决方案


是的。正则表达式不使用索引。你能做什么?

好吧,如果你只是在寻找平等,那么使用平等:

where id = 'SV4889'

这将使用(id).

如果您正在寻找领先价值,请使用like

where id like 'SV4889%'

这将使用索引,因为通配符位于模式的末尾

如果您在列中存储多个值,请说'SV4889,SV4890' then fix your data model。它被打破!你应该有另一个表,每行一行id

最后,如果您真的需要更复杂的全文功能,请查看 Oracle 对全文索引的支持。但是,在名为 的列上通常不需要此类功能id


推荐阅读