我在一个非常复杂的查询中有一个类似
的条件and regexp_substr(service.name, '\d+') = ?
当我运行解释计划并检查生产时,这个简单的过滤器会导致很多性能问题。
关于如何实现目标并获得更好性能的任何想法? 听说递归QTE,但听起来很遥远。
目标是从service.name获取数字并与输入进行比较。
Sample data of service.name field would be like
AB 12345
AB1234567
AB 12345
AB:352356
没有固定的模式,应该从中抽出数字并与输入进行比较。
答案 0 :(得分:2)
当你使用regexp_substr
时,如果你在service.name
上有索引它不会被使用,那么regexp_substr
会导致java和sql / pl / sql机器之间的切换,你怎么办?可以尝试做的是
选项1)在函数' regexp_substr(service.name,' \ d +')'上创建索引。要么
选项2)尝试使用like
它将是这样的service.name like '%<here is your number>%'