使用通配符的Oracle正则表达式

时间:2011-01-06 21:47:52

标签: regex performance oracle

在REGEXP_LIKE中使用通配符正则表达式会比不包括条件子句的性能更低。

例如,我想创建一个Oracle预处理语句,如下所示:

select * from table_name 
where regexp_like(column1, ?)
and regexp_like(column2, ?)
and regexp_like(column3, ?)
and regexp_like(column4, ?)

查询可能不需要为所有列指定条件。对于那些没有标准的列,我们可以使用通配符正则表达式* OR 我们可以简单地不包含where子句中的条件。

select * from table_name 
where regexp_like(column1, 'h[i|ello]')
and regexp_like(column2, '.*')
and regexp_like(column3, '.*')
and regexp_like(column4, 'bye')

select * from table_name 
where regexp_like(column1, 'h[i|ello]')
and regexp_like(column4, 'bye')

在regexp_like条件下使用通配符会不会完全不包括条件?如果是这样,它会有显着的性能差异吗?

潜在的问题是可以使用单个sql语句,而不必根据指定的条件动态创建sql语句。

1 个答案:

答案 0 :(得分:1)

我想优化器会在看到where .. regexp_like时选择进行全表扫描,因此,我认为任何性能影响都可以忽略不计,无论你如何regexp_like在你的条件下。