Redshift медленный подзапрос (если он включает определенные столбцы)

У меня есть запрос следующим образом:

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 runlength а также user_ipaddress varchar(45) encode runlength,

Вот Объяснение для запросов:

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

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

Я действительно хотел бы ускорить второй запрос. Какие-либо предложения?

1 ответ

Это может быть из-за вашего короткого ключа.. если ваши данные отсортированы на основе идентификатора пользователя, то данные будут получены быстро (для первого запроса), так как красные смещения будут знать, в каком сегменте находятся ваши данные (на основе карты зоны), и могут пропустите много ломтиков, и ваш IO будет значительно ниже.

Другие вопросы по тегам