SELECT
count(*)
FROM
acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data as recording_data,
acc_{account_id}.sessions as sessions
WHERE
recording_data.usp_id = sessions.usp_id
AND sessions.referrer_id = recordings_urls.id
AND ( urls && array(select id from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%')::text[] )
AND r_time > to_timestamp(1542585600)
AND r_time < to_timestamp(1545177599)
AND recording_data.duration >=5
AND recording_data.num_of_pages > 0 ;
Uye pano ndiyo nguva:
Yakarongwa nguva: 1.480 ms Nguva yekuuraya: 1431924.650 ms
Mubvunzo wakakambaira zviuru zana nemakumi mashanu emitsara. Murongi wemubvunzo airatidza akati wandei anonakidza ruzivo, asi pasina mabhodhoro ari pachena.
Ziva zvakare kuti matafura edu ese akatogovaniswa ne account_id. Nenzira iyi, mamiriro ezvinhu apo imwe yakakurisa account inokonzera matambudziko kune vamwe inobviswa.
analytics_db=# SELECT
count(*)
FROM
acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data_0 as recording_data,
acc_{account_id}.sessions_0 as sessions
WHERE
recording_data.usp_id = sessions.usp_id
AND sessions.referrer_id = recordings_urls.id
AND r_time > to_timestamp(1542585600)
AND r_time < to_timestamp(1545177599)
AND recording_data.duration >=5
AND recording_data.num_of_pages > 0 ;
count
-------
8086
(1 row)
Time: 147.851 ms
Uye iyi yakanga isiriwo nyaya yedu. JOIN's yakange ichimhanya chaizvo.
SELECT
count(*)
FROM
acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data as recording_data,
acc_{account_id}.sessions as sessions
WHERE
recording_data.usp_id = sessions.usp_id
AND ( 1 = 1 )
AND sessions.referrer_id = recordings_urls.id
AND (exists(select id from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%'))
AND r_time > to_timestamp(1547585600)
AND r_time < to_timestamp(1549177599)
AND recording_data.duration >=5
AND recording_data.num_of_pages > 0 ;
count
32519
(1 row)
Time: 1636.637 ms
Zvakanaka, hongu. Subquery kana yakaputirwa mukati EXISTS, inoita kuti zvinhu zvese zvive nekukurumidza. Mubvunzo unotevera une musoro ndewekuti sei chikumbiro ne JOIN-ami uye iyo subquery pachayo inokurumidza mumwe nemumwe, asi inononoka pamwe chete?
WITH matching_urls AS (
select id::text from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%'
)
SELECT
count(*) FROM acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data as recording_data,
acc_{account_id}.sessions as sessions,
matching_urls
WHERE
recording_data.usp_id = sessions.usp_id
AND ( 1 = 1 )
AND sessions.referrer_id = recordings_urls.id
AND (urls && array(SELECT id from matching_urls)::text[])
AND r_time > to_timestamp(1542585600)
AND r_time < to_timestamp(1545107599)
AND recording_data.duration >=5
AND recording_data.num_of_pages > 0;
Kutarisa zvinyorwa, tinozviona && rinoshandiswa kana iwe uchida kutsvaga zvakajairika zvinhu pakati pezvirongwa zviviri.
Muchikumbiro chepakutanga ndeichi:
AND ( urls && array(select id from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%')::text[] )
Zvinoreva kuti tinoita tsvakiridzo yemapateni pamaURL edu, tobva tawana mharadzano ine maURL ese ane zvakajairika. Izvi zvinoti vhiringa nekuti "urls" pano hairevi tafura ine ma URL ese, asi kune "urls" column iri patafura. recording_data.
Filter: ((urls && ($0)::text[]) AND (r_time > '2018-12-17 12:17:23+00'::timestamp with time zone) AND (r_time < '2018-12-18 23:59:59+00'::timestamp with time zone) AND (duration >= '5'::double precision) AND (num_of_pages > 0))
Rows Removed by Filter: 52710
SELECT 1
FROM
acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data_30 as recording_data_30,
acc_{account_id}.sessions_30 as sessions_30
WHERE
urls && array(select id from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%')::text[]
SELECT urls.url
FROM
acc_{account_id}.urls as urls,
(SELECT unnest(recording_data.urls) AS id) AS unrolled_urls
WHERE
urls.id = unrolled_urls.id AND
urls.url ILIKE '%jobs%'
Panzvimbo iyoyo JOIN syntax Ini ndichangoshandisa subquery uye yakawedzera recording_data.urls array kuitira kuti iwe ugone kushandisa zvakananga mamiriro mukati WHERE.
Chinonyanya kukosha apa ndechekuti && inoshandiswa kutarisa kuti chakapihwa chine URL inoenderana here. Kana iwe ukatsveta zvishoma, unoona oparesheni iyi ichifamba nepakati pezvinhu zvehurongwa (kana mitsara yetafura) uye inomira kana mamiriro (mechi) asangana. Hapana chinokuyeuchidza here? Ehe, EXISTS.
SELECT
count(*)
FROM
acc_{account_id}.urls as recordings_urls,
acc_{account_id}.recording_data as recording_data,
acc_{account_id}.sessions as sessions
WHERE
recording_data.usp_id = sessions.usp_id
AND ( 1 = 1 )
AND sessions.referrer_id = recordings_urls.id
AND r_time > to_timestamp(1542585600)
AND r_time < to_timestamp(1545177599)
AND recording_data.duration >=5
AND recording_data.num_of_pages > 0
AND EXISTS(
SELECT urls.url
FROM
acc_{account_id}.urls as urls,
(SELECT unnest(urls) AS rec_url_id FROM acc_{account_id}.recording_data)
AS unrolled_urls
WHERE
urls.id = unrolled_urls.rec_url_id AND
urls.url ILIKE '%enterprise_customer.com/jobs%'
);
Uye nguva yekupedzisira yekutungamira Time: 1898.717 ms Inguva yekupemberera?!?
Kwete nekukurumidza! Kutanga iwe unoda kutarisa kururama. Ndainyumwa zvakanyanya EXISTS optimization sezvainoshandura pfungwa yekumisa kare. Tinofanira kuva nechokwadi chekuti hatina kuwedzera kukanganisa kusiri pachena kuchikumbiro.
Muedzo wakapfava waiva wokumhanya count(*) pamibvunzo yese inononoka uye inokurumidza yenhamba huru yemaseti edata akasiyana. Zvadaro, kune diki diki re data, ini ndakasimbisa nemaoko kuti zvese zvabuda zvaive zvechokwadi.
Maedzo ese airamba achipa mhinduro dzakanaka. Takagadzirisa zvese!