【发布时间】:2015-08-15 09:22:33
【问题描述】:
我有一个查询如下:
SELECT
e.event_id,
(
SELECT
event_id
FROM atomic.events
WHERE
domain_userid = e.domain_userid
ORDER BY collector_tstamp
LIMIT 1
) AS parent_event_id
FROM snowplow_intermediary.events_enriched e
LIMIT 1
我正在尝试为每个用户查找第一个事件。这是相当快的~5s。
如果我试图通过user_ipaddress 而不是domain_userid 来查找用户,那会慢很多。 300 秒后它还没有完成。
SELECT
e.event_id,
(
SELECT
event_id
FROM atomic.events
WHERE
user_ipaddress = e.user_ipaddress
ORDER BY collector_tstamp
LIMIT 1
) AS parent_event_id
FROM snowplow_intermediary.events_enriched e
LIMIT 1
数据类型为domain_userid varchar(36) encode runlength和user_ipaddress varchar(45) encode runlength。
以下是查询的解释:
https://gist.github.com/mortenstarfly/4ce3be9b3a19aac2601a
https://gist.github.com/mortenstarfly/2008b0f737259df30695
我真的很想加快第二个查询。 有什么建议吗?
【问题讨论】:
-
您的执行计划看起来比您的查询复杂得多。
-
我同意 - 但我对 Redshift 查询计划不太熟悉,似乎找不到任何帮助
-
我不明白这么小的差异(相同的编码,粗略的相同大小)怎么会那么长。任何更新都会引起极大的兴趣。
标签: sql amazon-redshift snowplow