2011-01-06 59 views
1

在REGEXP_LIKE中使用通配符正则表达式的表现会低于不包括condition子句。使用通配符的Oracle正则表达式

例如,我想创建一个Oracle准备的语句像下面这样:

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

查询可能不需要指定标准中的所有列。对于那些没有条件的列,我们可以使用通配符正则表达式* ,我们可以简单地不包含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') 

OR

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

会使用通配符在REGEXP_LIKE条件比简单地不包括条件都不太高性能?如果是这样,它会是一个显着的性能差异?

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

回答

1

我猜想优化器选择在看到where .. regexp_like后立即进行全表扫描,因此,我认为任何性能影响都可以忽略不计,无论您在何处出现如何条件。