使用regexp_substr的性能问题

时间:2014-03-19 06:27:16

标签: sql regex oracle

我在一个非常复杂的查询中有一个类似

的条件
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

没有固定的模式,应该从中抽出数字并与输入进行比较。

1 个答案:

答案 0 :(得分:2)

当你使用regexp_substr时,如果你在service.name上有索引它不会被使用,那么regexp_substr会导致java和sql / pl / sql机器之间的切换,你怎么办?可以尝试做的是

选项1)在函数&#39; regexp_substr(service.name,&#39; \ d +&#39;)&#39;上创建索引。要么 选项2)尝试使用like它将是这样的service.name like '%<here is your number>%'