Регулярные выражения Oracle с использованием подстановочных знаков - PullRequest
1 голос
/ 07 января 2011

Будет ли использование регулярного выражения с подстановочными знаками в REGEXP_LIKE менее производительным, чем вообще без условия условия.

Например, я хочу создать подготовленный оператор 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 Ответ

1 голос
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...