2011-01-06 1 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と表示されたらすぐに全テーブルスキャンを実行することをオプティマイザが選択しているため、パフォーマンスの影響は無視されます。

関連する問題