2011-01-06 4 views
1

Будет ли использовать регулярное выражение подстановки в REGEXP_LIKE менее результативным, чем вообще не включать условие условия.Регулярные выражения 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') 

ИЛИ

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

бы с использованием подстановочных знаков в условиях REGEXP_LIKE быть менее производительным, чем просто не включая состояние вообще? Если да, то это будет значительная разница в производительности?

Основная проблема заключается в том, что вместо того, чтобы динамически создавать инструкцию sql в соответствии с указанными критериями, можно использовать один оператор sql.

ответ

1

Я думаю, что оптимизатор хочет выполнить полное сканирование таблицы, как только он увидит where .. regexp_like, и поэтому я бы предположил, что любое воздействие на производительность незначительно, независимо от того, насколько у вас есть regexp_like.