4

Postgres のパフォーマンスに関する質問があります。約 500K 行のテキストのテーブルがあります。グローバルな検索と置換ルーチンを実行する必要があります。これら 2 つの UPDATE ステートメントのうちの 1 つは、他のステートメントよりも大幅に高速でしょうか? それとも、パフォーマンスはかなり似ていますか?

update mytable
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g');

update mytable
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g')
where mycolumn like '%ReplaceMe%';
4

1 に答える 1

4

一般に、クエリを制限するために where ステートメントを含めると、SQL クエリは常に高速になります。したがって、2番目は間違いなく高速になるはずです。基本的に、データベースはその種の操作を非常に迅速に実行できます。最初のものは最初にリスト全体を取得し、次に正規表現ステートメントを介してチェックします。後者は、短縮されたリストで正規表現を実行するだけです。

ただし、a_horse_with_no_name が指摘したように、 に関連付けられたインデックスがない限り%ReplaceMe%、クエリは速くなりません。ただし、正規表現コマンドで処理される項目が少なくなるため、多少は速くなるはずです。

于 2012-11-24T12:29:22.660 に答える