在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语句。
答案 0 :(得分:1)
我想优化器会在看到where .. regexp_like
时选择进行全表扫描,因此,我认为任何性能影响都可以忽略不计,无论你如何regexp_like
在你的条件下。