Мне нужна помощь в оптимизации этого конкретного запроса. Если вы видите, что выполняется несколько подзапросов, но они работают в одной таблице. Проблема состоит в том, что GROUP BY используется двумя подзапросами, и есть еще два подзапроса, которые не используют GROUP BY. Могут ли эти 4 подзапроса быть объединены, чтобы просто сканировать таблицу один раз.Оптимизация запросов - 10001
WITH f AS
(
SELECT a.custom_referal_page,
a.campaign_id,
a.domain_user_id,
a.event_name,
COUNT(a.event_name),
(SELECT COUNT(a1.event_name)
FROM action_fact_new_wodim a1
WHERE a1.domain_url = 'alternativeapparel.com'
AND a1.event_name = 'AltOrig PerfCapSl GoToPro'
-- AND a1.date_stamp BETWEEN '20140501' AND '20140530'
AND a1.time_stamp BETWEEN '2014-05-01 14:43:15' AND '2014-05-30 14:43:15'
AND event_name != 'Page load'
AND event_name != 'Page unload') AS totalCount,
(SELECT COUNT(domain_user_id)
FROM (SELECT DISTINCT a1.domain_user_id,
a1.custom_referal_page
FROM action_fact_new_wodim a1
WHERE a1.domain_url = 'alternativeapparel.com'
AND a1.event_name = 'AltOrig PerfCapSl GoToPro'
-- AND a1.date_stamp BETWEEN '20140501' AND '20140530'
AND a1.time_stamp BETWEEN '2014-05-01 14:43:15' AND '2014-05-30 14:43:15'
AND event_name != 'Page load'
AND event_name != 'Page unload') AS a2) AS uniqueCount,
(SELECT COUNT(domain_user_id)
FROM (SELECT DISTINCT domain_user_id
FROM action_fact_new_wodim a1
WHERE a1.domain_url = 'alternativeapparel.com'
AND a1.event_name = 'AltOrig PerfCapSl GoToPro'
-- AND a1.date_stamp BETWEEN '20140501' AND '20140530'
AND a1.time_stamp BETWEEN '2014-05-01 14:43:15' AND '2014-05-30 14:43:15'
AND event_name != 'Page load'
AND event_name != 'Page unload') AS a2) AS totalUniqueCount
FROM action_fact_new_wodim a
WHERE a.domain_url = 'alternativeapparel.com'
AND a.event_name = 'AltOrig PerfCapSl GoToPro'
-- AND a.date_stamp BETWEEN '20140501' AND '20140530'
AND a.time_stamp BETWEEN '2014-05-01 14:43:15' AND '2014-05-30 14:43:15'
AND event_name != 'Page load'
AND event_name != 'Page unload'
GROUP BY a.custom_referal_page,
a.campaign_id,
a.domain_user_id,
a.event_name
)
SELECT custom_referal_page,
campaign_id,
SUM(COUNT) AS COUNT,
MAX(totalCount) AS totalCount,
COUNT(uniqueCount) AS uniqueCount,
MAX(totalUniqueCount) AS totalUniqueCount
FROM f
GROUP BY custom_referal_page,
campaign_id
ORDER BY 3 DESC
Выход: custom_referal_page campaign_id Количество TotalCount uniquecount totaluniquecount https://www.google.ca/ нуль 10838 20153 5346 9906 https://www.google.com/ нуль 3040 20153 1727 9906
Каждый из ваших где положения имеют определенное событие, а затем! = Загрузилась страница/выгрузки, которая делает бессмысленным, поскольку он может быть только тем или иным. Кроме того, вы намерены основывать запрос на time_stamp или date_stamp (который закомментирован) – DRapp