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 будет значительно ниже.