2016-12-16 11 views
0

以下は現在、urlクエリ文字列からパラメータを解析する方法です。誰もがより良い、より高速なソリューションを知っていますか?どうも。Postgresqlの解析URLパラメータ

select 
    id, 
    url, 
    split_part(regexp_split_to_table((regexp_matches(url, '\?(.*)'))[1], '&'), '=', 1) as key, 
    split_part(regexp_split_to_table((regexp_matches(url, '\?(.*)'))[1], '&'), '=', 2) as value 
from ad; 
+1

タイムスタンプのインデックスはありますか?パフォーマンスに関する質問には、 'EXPLAIN ANALYZE'とテーブルサイズ、インデックス、現在の時間パフォーマンス、欲求時間などに関する情報が含まれていなければなりません。'スロー 'は相対的な用語であり、比較するには本当の価値が必要です。 –

+0

現時点で約1.75Mの行だけですが、数千万または数億にすばやく埋まります。 私はオーダーでそれを貼り付けて行を制限することはわかりませんでしたが、申し訳ありません。私は必要なものだけを含めるように質問を編集しました。 –

+0

まだ 'EXPLAIN ANALYZE'がなければ、プロセスの遅い部分がどこにあるのかわかりません。 –

答えて

1

同じURLに対して2つの正規表現マッチングを行い、結果の2つの分割を行います。

最初の?の位置を見つけるのに、より単純な関数を使用することをおすすめします。 substring(url, position('?' in url))の場合、regexp_split_to_arrayを使用して分割を1回だけ行うことができます。

これは、common table expressionまたはサブクエリで発生する可能性があります。配列の結果にインデックスでアクセスして返すことができます。

これはもちろん、クエリが処理時間によって支配され、フィルタリングとフェッチの時間がない場合にのみ意味があります。 プロファイリングなしの最適化は時間の無駄です。

関連する問題