【问题标题】:Redshift slow sub query (if it includes certain columns)Redshift 慢速子查询(如果它包含某些列)
【发布时间】: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 runlengthuser_ipaddress varchar(45) encode runlength

以下是查询的解释:

https://gist.github.com/mortenstarfly/4ce3be9b3a19aac2601a

https://gist.github.com/mortenstarfly/2008b0f737259df30695

我真的很想加快第二个查询。 有什么建议吗?

【问题讨论】:

  • 您的执行计划看起来比您的查询复杂得多。
  • 我同意 - 但我对 Redshift 查询计划不太熟悉,似乎找不到任何帮助
  • 我不明白这么小的差异(相同的编码,粗略的相同大小)怎么会那么长。任何更新都会引起极大的兴趣。

标签: sql amazon-redshift snowplow


【解决方案1】:

这可能是因为您的短键..如果您的数据是根据用户 ID 排序的,那么数据将被快速检索(对于第一个查询),因为红移会知道您的数据位于哪个段中(基于区域地图) 并且可以跳过很多切片,并且您的 io 会显着降低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-05-30
    • 2020-08-12
    相关资源
    最近更新 更多