2

我有一个查询如下:

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它的方式更慢。300s 后它没有完成。

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

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

4

1 回答 1

-1

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

于 2017-07-02T11:18:54.817 回答