2016-06-13 29 views
1

私は 'abc.cfm'または '/ entity /'のURLに一致する必要がある過去60日間に訪問したページのトップカウントを取得するために以下を使用しています。正規表現を使ってこれを行う方法はありますか?以下のメソッドは使用するのが大丈夫ですか、より良い方法がありますか?前もって感謝します。instrとoracleの文字列一致の正規表現

SELECT url, count(URL) 
    FROM tableone 
    WHERE (INSTR(url, 'abc.cfm') > 0 
    or 
     INSTR(url, '/entity/') > 0) 
and VIEW_DT > sysdate - 60 
group by URL 
order by count(URL) desc 

答えて

2

だけlikeを使用してみてください。私は700を基準にマッチしているの1.8Mの行を持つテーブル上でテスト

WHERE ( url like '%abc.cfm%' 
     or url like '%/entity/%' 
     ) 

:これは通常instrずっと速くregexp_likeよりより少し速くなります。繰り返されるテストからのおおよそのタイミングは以下の通りであった。

instr   0.9 seconds 
regexp_like 15.0 seconds 
like   0.6 seconds 

私だけlikeにはあまりにも複雑な式にregexp_likeを使用します。

+0

詳細情報をありがとうございます。 – user747291

1

regexp_like(url,'(abc.cfm|/entity/)') 

代わりの

(INSTR(url, 'abc.cfm') > 0 
    or 
     INSTR(url, '/entity/') > 0) 
関連する問題