【发布时间】:2018-11-01 16:07:35
【问题描述】:
我有一个包含路径前缀的表“前缀”,例如a/b/c/,以及另一个包含绝对路径的表“键”,例如a/b/c/foo.txt。
我将在(概念上)“key.value 以 prefix.value 开头”加入后者反对前者。
最初我尝试过
keys.value like prefixes.value || '%'
...但这对于包含对“like”运算符有意义的字符的前缀是有问题的,例如_、%等
我决定了:
substring(keys.value, length(prefixes.value)) = prefixes.value
...但是速度要慢得多。其他帖子建议使用 regexp_replace 来转义前缀中的特殊字符,然后使用带有尾随 % 的 like 运算符,但考虑到 regexp_replace(),我无法想象这是性能方面的改进。
有没有更清洁/更快/更好的方法来完成这个?
【问题讨论】:
-
你能修改涉及的表吗?理想情况下,我会在“keys”表中添加一列,其中只包含键的前缀部分,希望两个表都分布在该列上,这样就可以对键进行简单有效的连接。
标签: sql query-optimization amazon-redshift