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

各ユーザーの最初のイベントを見つけようとしています。これはかなり速い ~5 秒です。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です。

クエリの EXPLAIN は次のとおりです。

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

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

2番目のクエリを高速化したいです。助言がありますか?

4

1 に答える 1

-1

短いキーが原因である可能性があります..データがユーザーIDに基づいてソートされている場合、データは(最初のクエリで)高速に取得されます.redshiftsはデータが存在するセグメントを(ゾーンマップに基づいて)認識し、多くのスライスをスキップすると、IO が大幅に低くなります。

于 2017-07-02T11:18:54.817 に答える