以下是我目前如何解析url查询字符串中的参数。有谁知道更好更快的解决方案? THX。
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;
答案 0 :(得分:1)
您为同一个网址执行两次正则表达式匹配,然后对结果进行两次分割。
我建议使用更简单的功能来查找网址中第一个?
的位置,例如substring(url, position('?' in url))
,那么您可能只能使用regexp_split_to_array
进行一次拆分。
这可能发生在common table expression或子查询中;然后你可以通过索引访问数组结果返回。
当然,这只有在查询由处理时间占主导地位而不是过滤和获取时间时才有意义。 优化而不进行分析是浪费时间。