sql - Oracle REGEXP_LIKE 函数使用索引表扫描?
问题描述
我正在使用 regexp_like 函数来搜索列上的特定模式。但是,我看到这个查询没有采用在该列上创建的索引,而是进行全表扫描。是否有任何选项可以为 regexp_like 创建基于函数的索引,以便我的查询将使用该索引?在这里,模式 SV4889 不是常量表达式,而是每次都会变化。
select * from test where regexp_like(id,'SV4889')
解决方案
是的。正则表达式不使用索引。你能做什么?
好吧,如果你只是在寻找平等,那么使用平等:
where id = 'SV4889'
这将使用(id)
.
如果您正在寻找领先价值,请使用like
:
where id like 'SV4889%'
这将使用索引,因为通配符位于模式的末尾。
如果您在列中存储多个值,请说'SV4889,SV4890'
then fix your data model。它被打破!你应该有另一个表,每行一行id
。
最后,如果您真的需要更复杂的全文功能,请查看 Oracle 对全文索引的支持。但是,在名为 的列上通常不需要此类功能id
。
推荐阅读
- php - PHP ImageMagick 扩展 Imagick 找出图像有多少白色
- python - 在python中的名称列表中查找首字母和中间首字母
- react-native - 为什么 react-native-picker 不为我工作
- discord - 机器人不和谐不会对表情符号做出反应
- php - 在 PHP 中组合两个数组的最佳方法
- python - 创建一个计时器,告诉我自上次通过函数以来已经过去了多少时间
- swift - 有没有办法使用 UIKit 的 PDFView 类来实现以下目标?
- c - 当我的数组大于 4 个元素时出现分段错误
- azure - OWASP ZAP 全扫描停止在 CICD 管道中工作
- python - Python将数据加载到MySQL中:AttributeError:'tuple'对象没有属性'encode'