2016-12-16 271 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'和一些关于表格大小,索引,当前时间表现,期望时间等的信息。'Slow'是一个相对术语,我们需要一个真实值来比较。 –

+0

目前仅有大约250万行,但它会迅速填满数十亿或数亿。 哎呀我没有意识到我粘贴的顺序和限制行,并不意味着,对不起。我编辑的问题只包括必要的东西。 –

+0

仍然没有'EXPLAIN ANALYSE',我们不知道该过程的缓慢部分在哪里。 –

回答

1

你对同一个URL做两个正则表达式匹配,然后对结果进行两次分割。

我建议使用更简单的函数来查找URL中第一个?的位置,例如, substring(url, position('?' in url)),那么你可能可以使用regexp_split_to_array来分割一次。

这可能发生在common table expression或子查询中;那么你可以通过索引访问数组结果返回。

这当然只有在查询由处理时间支配时才有意义,而不是过滤和获取时间。 没有分析的优化是浪费时间。