ááŒá®ážáá²á·ááá·áº áá®áááºáá¬áááœáẠVWO áá¶á·ááá¯ážáá°áá®ááŸá¯á¡ááœá²á·áá¶á០á áááºáááºá á¬ážááœááºáá±á¬ááºážáá±á¬ áá»áá¯á·ááœááºážáá»ááºá¡á á®áááºáá¶á á¬ááᯠáá»áœááºá¯ááºáááºáá¶áááŸááá²á·áááºá áá±á¬áºááá¯ááááºáá±á¬ááºáááºááŒá®ážáá»á¬ážá¡ááœáẠááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡á á®áááºáá¶á á¬áá»á¬ážáá²á០áá áºáá¯á¡ááœáẠáááºááá·áºá¡áá»áááºááẠáá¬ážááŒá áºáá¬ážáá¯á¶ááááºá ááŒá®ážáá±á¬á· áá«á áá»áœááºáá±á¬á·áºáá²á·áá¬áááºááá¹ááá¬ážááŒá áºáá²á·á¡ááœáẠááŒá¿áá¬ááá¯ááŒá±ááŸááºážááá¯á· áá»ááºáá»ááºážá¡á¬áá¯á¶á áá¯ááºáá²á·áááºá
á á±á¬ááá¯áá»ážáá¬á
áá«ááŒá±á¬áá±áá¬ááœá±ááᯠááŸááºážááŸááºážáááºážáááºážáááá¡á±á¬áẠVWO á¡ááŒá±á¬ááºáž áááºážáááºážááŒá±á¬ááŒáááºá áááºážááẠááá·áºáááºááá¯ááºáá»á¬ážáá±á«áºááœáẠáá áºááŸááºáá¬ážáá±á¬ áááºááááºážáá»á¬ážááᯠá¡áá»áá¯ážáá»áá¯ážááœáá·áºááá¯ááºááá·áº ááááºáá±á¬ááºážáá áºáá¯ááŒá áºáááº- A/B á ááºážáááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒááºážá áá¬áá±á¬ááºáá°áá»á¬ážááŸáá·áº áá¬áá¬ááŒááºááá¯ááŸá¯áá»á¬ážááᯠááŒá±áá¬áá¶ááŒááºážá á¡áá±á¬ááºážáááºážááŒá±á¬ááºážááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒááºážá á¡áá°ááŒá±áá¯á¶áá»á¬ážááᯠááŒáááŒááºážááŸáá·áº áááºáááºááŸá¯ááŸááºáááºážáá»á¬ážááᯠááœáá·áºááŒááºážááá¯á· ááŒá¯áá¯ááºááá¯ááºáá«áááºá
ááá¯á·áá±á¬áº ááááºáá±á¬ááºážááŸáá·áºáááºáááºáá±á¬ á¡áá±ážááŒá®ážáá¯á¶ážá¡áá»ááºááŸá¬ ááááºážááá¯á·ááŒááºážáááºááŒá áºáááºá á¡áááºáá±á¬áºááŒáá« áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž á¡á¬ážáá¯á¶ážááẠá¡ááŒááºá¡ááŸáẠáá»áááºáááºáá±áá«áááºá áá±á¬áºááá¯ááááºáá±á¬ááºáááºáá»á¬ážá¡ááœááºá á¡áá»ááºá¡áááºáá»á¬ážá áœá¬ááẠáááºážááᯠááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá¯á¶á á¶ááŒáá·áº áááºáááºáá±ážááá·áº á¡á áœááºážáááºáá±á¬ááááºáá±á¬ááºážáááŸááá² ááá¯ážááá¯ážááŸááºážááŸááºáž á¡áá¯á¶ážááááºáá±á¬á·áá«á
ááááºáá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á ááŒá®ážáá¬ážáá±á¬áá±áá¬á¡á á¯á¶ááœáẠáá»áááºážáá±ážááŒááºážááŸá¯áá áºáᯠááŒá¯áá¯ááºááá¯ááºáááºá áá«ááá±á¬á· ááá¯ážááŸááºážáá²á· á¥ááá¬áá áºáá¯áá«á
Chrome ááá¯á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠááá¯á·ááá¯áẠ(á¥áá±á¬áááœááºááŸáááŒá®áž á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠ<date d1> á០<date d2> á¡áá) "abc.com" á á¬áá»ááºááŸá¬ááŸá ááá áºá¡á¬ážáá¯á¶ážááá¯ááŒáá« iPhone)
Boolean á¡á±á¬áºááá±áá¬áá»á¬ážááᯠááá¯ááŒá¯áá«á ááá°áá¬áá»á¬ážááá°ááẠááááºáááᯠááŸá¯ááºááœá±ážáá±á¬ áá±ážááŒááºážááŸá¯áá»á¬ážááᯠááŒá¯áá¯ááºáááºá¡ááœáẠáááºážááá¯á·ááᯠá á¯á¶á ááºážááŸá¯ á¡ááºáá¬áá±á·á áºááŸá áá¯á¶ážá áœá²áá°áá»á¬ážáá¶ áááŸáááá¯ááºáá«áááºá
áá±á¬ááºážááá¯ááŸá¯ááŸá±ážááœá±áž
áá±ážááœááºážáá¯ááºááá·áºáá±á¬ááºáááºááẠá¡ááá¯ááá¯áá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááá·áºááá·áºá¡áá¬áá áºáá¯ááᯠáá¯ááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáá±áááº-
"/jobs" áá«ááŸááá±á¬ URL ááŒáá·áº áááºááá·áºá á¬áá»ááºááŸá¬ááá¯áááᯠáááºááŒáá·áºáá²á·áá±á¬ á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠá ááºááŸááºááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠááŒáá«
á€ááá¯ááºááœáẠá¡ááœá¬ážá¡áᬠáá»á¬ážááŒá¬ážááŒá®áž áááºážá¡ááœááºáᬠáá°ážááŒá¬ážáá±á¬ URL áá áºáááºážáá»á±á¬áºááᯠááááºážáááºážáá¬ážáá«áááºá áááºážááá¯á·ááẠáááºážááá¯á·á áá¯ááºáááºážáá¯á¶á á¶ááŸáá·áº áááºá ááºáá±á¬ ááá¯ážááŸááºážáá±á¬ URL ááá°áá¬áá¯á¶á á¶ááᯠááŸá¬ááœá±ááá¯ááŒáááºá
ááá¬áá á¯á¶á ááºážá á áºáá±ážááŒááºážá
Database áá²ááŸá¬ áá¬ááœá±ááŒá áºáá±áá² ááŒáá·áºáá¡á±á¬ááºá á¡á±á¬ááºááœááºáá°áááºážááŸá±ážááœá±ážáá±á¬ SQL áá±ážááŒááºážááŸá¯ááŒá áºáááº-
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 ;
á€áááºááŸá¬ á¡áá»áááºááá¬ážáá»á¬ážááŒá áºáááº-
á á®á ááºáá¬ážáá±á¬á¡áá»áááº- 1.480 ms á¡áá±á¬ááºá¡áááºáá±á¬áºáá»áááº- 1431924.650 ms
áááºážá á®ááŒá®áž áá±á¬ááºáá²á·áá²á· áá á,áááá á á¯á¶á ááºážáá±ážááŒááºážááŸá¯ á¡á á®á¡á ááºáá±ážááœá²áá°ááẠá áááºáááºá á¬ážááœááºá¡áá±ážá áááºá¡áá»ááºá¡áá»áá¯á·ááᯠááŒááá²á·áá±á¬áºáááºáž áááºááŸá¬ážáá±á¬ ááááºááá¯á·ááŸá¯áá»á¬áž áááŸááá«á
áá±á¬ááºážááá¯áá»ááºááᯠáááºáááºáá±á·áá¬ááŒáá«á
áá¯á·á áááºážááŒááºáá²á·á¡ááá¯ááºážáá²á JOIN á
á¬ážááœá²áá¯á¶ážáá¯á¶áž
- á¡á ááºážá¡áá±ážáá»á¬áž: á ááºááŸááºá¡áá»ááºá¡áááºááᯠááŒááááº- ááá±á¬ááºáá¬á á¡áá¯á¶ážááŒá¯áá° á¡á±ážáá»áá·áºá ááá¯ááºáá¶á á áááºááŒáá·áºá
- recording_data: ááŸááºáááºážáááºáá¬ážáá±á¬ URL áá»á¬ážá á á¬áá»ááºááŸá¬áá»á¬ážá áááºáááºááŸá¯ááŒá¬áá»áááº
- url áá»á¬áž: á¡ááœááºááŒá®ážáá¬ážáá±á¬ URL áá»á¬ážááᯠááœá¬ážááŒááºážá០ááŸá±á¬ááºááŒááºáááºá áááºážááá¯á·ááᯠáá®ážááŒá¬ážááá¬ážááœáẠááááºážáááºážáá«áááºá
áá»áœááºá¯ááºááá¯á·áááá¬ážá¡á¬ážáá¯á¶ážááᯠááá¯ááºážááŒá¬ážáá¬ážááŒá®ážááŒá
áºááŒá±á¬ááºážááá¯áááºáž áááááŒá¯áá«á account_id. á€áááºážá¡á¬ážááŒáá·áºá á¡áá°ážáááŒáá·áº ááŒá®ážáá¬ážáá±á¬á¡áá±á¬áá·áºáá
áºáá¯ááẠá¡ááŒá¬ážáá°áá»á¬ážá¡ááœáẠááŒá¿áá¬ááŒá
áºá
á±ááá·áº á¡ááŒá±á¡áá±áá
áºáá¯ááᯠáááºáá¯ááºáá¬ážáááºá
áá²ááœááºá ááŸá¬áá±
á¡áá®ážáááºá á áºáá±ážááŒá®ážáá±á¬ááºá áá®ážááŒá¬ážáá±á¬ááºážááá¯áá»ááºáá áºáá¯ááœáẠáá áºá á¯á¶áá áºáá¯ááŸá¬ážááœááºážáá±ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááá«áááºá á€á á¬ááŒá±á¬ááºážááᯠá¡áá®ážáááºááŒáá·áºááẠááá¯ááºáááºáááº-
urls && array(
select id from acc_{account_id}.urls
where url ILIKE '%enterprise_customer.com/jobs%'
)::text[]
ááá á¡ááœá±ážá á¡á²áá« ááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºááá¯á· ILIKE á€ááŸááºáá»á¬ážáá±á¬ URL áá»á¬ážá¡á¬ážáá¯á¶ážááœáẠ(áá»áœááºá¯ááºááá¯á·ááœáẠá.á áááºážáá»á±á¬áºááŸááááºá áá°ážááŒá¬áž á€á¡áá±á¬áá·áºá¡ááœáẠá
á¯áá±á¬ááºážáá¬ážáá±á¬ URL áá»á¬áž) á
áœááºážáá±á¬ááºááẠááááá¯ááºááá¯ááºáááºá
áá«áá±ááá·áº ááá¯ááºáá°ážá á¡á²áá«á á¡áááááá¯ááºáá°áž!
SELECT id FROM urls WHERE url ILIKE '%enterprise_customer.com/jobs%';
id
--------
...
(198661 rows)
Time: 5231.765 ms
ááá°áá¬áá¯á¶á á¶ááŸá¬ááœá±ááŸá¯áá±á¬ááºážááá¯áá»ááºááá¯ááºááá¯ááºá 5 á áá¹ááá·áºáá¬ááŒá¬áááºá áá°ážááŒá¬ážáá±á¬ URL áááºážáá±á«ááºážáá»á¬ážá áœá¬ááœáẠáá¯á¶á á¶áá áºáá¯ááᯠááŸá¬ááœá±ááŒááºážááẠááŒá¿áá¬ááá¯ááºáááºááŸá¬ ááŸááºážáá«áááºá
á
á¬áááºážááœáẠáá±á¬ááºáááºáá¶ááááŸááá°ááŸá¬ á¡áá»á¬ážá¡ááŒá¬ážááŒá
áºáááºá JOIN. áá°ááá¯á·áá²á· á¡ááœááºá¡áá»áœá¶ áá¯á¶ážá
áœá²ááŸá¯á ááŸá±ážááœá±ážá
á±áᬠááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáá«ááá¬ážá á¡áá»á¬ážá¡á¬ážááŒáá·áº JOINá
áœááºážáá±á¬ááºááẠááŒá¿áá¬áá»á¬ážá¡ááœáẠá¡áááºááŸá¬ážáá¯á¶áž ááá¯ááºá
á¬ážááŸááºáá±á¬ááºážáá»á¬áž ááŒá
áºááŒáá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·á ááá
á¹á
ááẠáá¯á¶ááŸááºááŒá
áºáááºáᯠáá»áœááºá¯áẠááá¯á¶ááŒááºáá²á·áá«á
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
ááŒá®ážáá±á¬á· áá«á áá«ááá¯á·ááá
á¹á
ááá¯ááºáá°ážá JOINá¡áá±á¬áºáá±áž ááŒááºáá¬áá²á·áááºá
áá¶ááááŸááá°á¡ááá¯ááºážááᯠáá»ááºážááŒá±á¬ááºážá á±áá«áááºá
ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ á áœááºážáá±á¬ááºáááºááŒáŸáá·áºáááºááŸá¯áá»á¬ážáááŸáááẠáá±ážááœááºážááᯠá áááºááŒá±á¬ááºážáá²ááẠáá»áœááºá¯ááºá¡áááºááá·áºááŒá áºáá±áá«ááŒá®á áá»áœááºá¯ááºááŸáá·áºá¡ááœá²á·ááẠá¡ááá á¡ááŒá¶á¥á¬áẠá áá¯ááᯠáá®ááœááºáá²á·áááº-
- subquery URL á¡ááœáẠEXISTS ááá¯áá¯á¶ážáá«á: URLs áá»á¬ážá¡ááœáẠsubquery ááœáẠááŒá¿áá¬áá
áºá
á¯á¶áá
áºáᬠááŸááááŸá áááºáá¶á
á
áºáá±ážááá¯áá«áááºá áá«ááᯠá¡á±á¬ááºááŒááºááá¯á· áááºážáááºážáá
áºáá¯ááá±á¬á· ááá¯ážááá¯ážááŸááºážááŸááºážáá² áá¯á¶ážáá¬áá«áá²á
EXISTS.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 (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
á¡ááºáž áá¯ááºáááºá áá¯ááºááá¯ážááŒá®ážáá±á¬á¡áá«ááœáẠSubquery EXISTSá á¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡ááœááºááŒááºáááºá
á±áááºá áá±á¬ááºáá¯áá¹ááááŸááá±á¬áá±ážááœááºážááŸá¬ á¡áááºááŒá±á¬áá·áºáá±á¬ááºážááá¯ááŸá¯ááŸáá·áºá¡áá° JOIN-ami ááŸáá·áº subquery ááá¯ááºááá¯ááºá áá
áºáŠážáá»ááºáž áá»ááºááŒááºáá±á¬áºáááºáž á¡áá°áá° ááŸá±ážááœá±ážáá±áá«ááá¬ážá
- subquery ááᯠCTE ááá¯á· ááœáŸá±á·áá«á : query ááẠáá°á·áá¬áá¬áá° ááŒááºáááºáá±áá«áá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒááºááááºááᯠáŠážá áœá¬ááœááºáá»ááºááŒá®áž áááºááá±ážááŒááºážááŸá¯ááá¯á· áá±ážáá±á¬ááºááá¯ááºáá«áááºá
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;
áá«áá±ááá·áº á¡áááºážááŸá±ážáá±áá±ážáááºá
ááá¬ážáá¶ááᯠááŸá¬ááœá±ááŒááºážá
áá®ááá»áááºáá¯á¶áž áá«á·áá»ááºáá¯á¶ážááœá±ááŸá±á·ááŸá¬ áá±ážáááºáá²á· á¡áá¬áá±ážááᯠáá±á«áºáá¬ááŒá®áž á¡áááºáááŒáẠááœááºááá¯ááºáá±áá²á·áááºá áá«áá±ááá·áº áááŒá¬ážáá¬á០ááá»ááºáá±á¬á·áá²á·á¡ááœáẠáá°á·ááá¯ááŒáá·áºááá¯á· áá¯á¶ážááŒááºááá¯ááºáááºá áá«ááŒá±á¬áá±áᬠ&& á¡á±á¬áºááá±áá¬á á¡á²á·áá®áá±á¬á· EXISTS á
áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºáá±ážáá¯á¶áá«áá²á && ááŸá±ážááœá±ážáá±ážááŒááºážááŸá¯ áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááœáẠáá
áºáá¯áááºážáá±á¬ áá»ááºááŸááá±áá±á¬ á¡áá»ááºááŒá
áºáááºá
ááŒáá·áºáá±ááẠá¡á²áá«ááᯠááŒááºáááºá && array ááŸá
áºáá¯ááŒá¬ážááœáẠáá¯á¶ááŒááºá
ááºáá»á¬ážááᯠááŸá¬ááœá±ááẠááá¯á¡ááºáá±á¬á¡áá«ááœáẠá¡áá¯á¶ážááŒá¯áááºá
áá°ááá±á¬ááºážááá¯áá»ááºááœááºá
AND ( urls && array(select id from acc_{account_id}.urls where url ILIKE '%enterprise_customer.com/jobs%')::text[] )
ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á URL áá»á¬ážáá±á«áºááœáẠáá¯á¶á
á¶ááŸá¬ááœá±ááŸá¯áá
áºáá¯ááŒá¯áá¯ááºááŒá®ážáá±á¬áẠá¡áá»á¬ážá¡á¬ážááŒáá·áº ááá¯á·á
áºáá»á¬ážáá«ááá·áº URL áá»á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº áááºážáá¯á¶ááá¯ááŸá¬áá«á á€áá±áá¬ááœáẠ"urls" ááẠURLs áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá«áááºáá±á¬ááá¬ážááᯠáááºááœáŸááºážááŒááºážáááŸááá±á¬áºáááºáž ááá¬ážááŸá "urls" áá±á¬áºáá¶ááᯠáááºááœáŸááºážáá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áááºážáááºááŸá¯ááºááœá±ážáá«áááºá recording_data.
áá¶ááááœá± ááá¯ážáá¬áá±áááºá &&áá¯ááºáá±ážáá¬ážáá±á¬ á
á¯á¶á
ááºážáá±ážááŒááºážááŸá¯ á¡á
á®á¡á
ááºááœáẠáááºážááá¯á·á¡ááœáẠá¡áááºááŒá¯áá»ááºááᯠááŸá¬ááœá±ááẠááŒáá¯ážá
á¬ážáá²á·áááºá EXPLAIN ANALYZE (áá»áœááºá¯ááºááœáẠááááºážáááºážáá¬ážáá±á¬ á¡á
á®á¡á
ááºáá
áºáᯠááŸááá¬ážááŒá®ážááŒá
áºáá±á¬áºáááºážá áá±ážááŒááºážááŸá¯ á¡á
á®á¡á
ááºáá±ážááœá²áá°áá»á¬ážá ááœáá·áºáááºážááŒááºáá¬ááŸá¯ááᯠáá¬ážáááºááẠááŒáá¯ážá
á¬ážááŒááºážááẠSQL ááœáẠá
ááºážáááºááŒááºážááŸá¬ ááá¯á¡áááºááŒá±áá«áááºá)
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[]
á€áá±ážááœááºážááẠááŸá±ážááœá±ážáááºá á¡ááŒá±á¬ááºážááŸá¬á JOIN-s á ááŒááºááŒá®áž subqueries ááœá±á ááŒááºáááºá áá»ááºáá¬á áá
áºáá¯áááºážáá²á && á¡á±á¬áºááá±áá¬á
á€áááºááŸá¬ á¡ááááá»áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯áá¬ááŒá
áºáááºá áá¯á¶á
á¶áá
áºáá¯ááᯠááŸá¬ááœá±ááẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá²áááºáž áá±á¬ááºáá¶ URL ááá¬ážáá
áºáá¯áá¯á¶ážááᯠááŸá¬ááœá±ááẠááá¯á¡ááºááŒá®áž áááºážáá¯á¶áá»á¬ážááᯠá¡ááŒá²ááŸá¬ááœá±ááẠááá¯á¡ááºáá«áááºá áááºážááá¯á·ááẠáááºááœáŸááºážáá±á¬ ID áá»á¬ážáá¬ááŒá
áºáá±á¬ááŒá±á¬áá·áº URL ááŸááºáááºážáá»á¬ážááᯠááá¯ááºááá¯ááºááŸá¬ááœá±ááááá«á urls.
á¡ááŒá±áá áºáá¯áá®ááá¯á·
&& ááŸá
áºáá¯áá¯á¶ážá ááŒá®ážáá¬ážáá¬ááŒá±á¬áá·áº ááŸá±ážáá«áááºá á¡á
á¬ážááá¯ážááá¯ááºááẠáá¯ááºáá±á¬ááºáá»ááºá á¡áá±á¬áºáá±ážááŒááºáá«áááá·áºáááºá urls á¡áá±á«áº { "http://google.com/", "http://wingify.com/" }.
Postgres ááᯠá¡áá¯á¶ážáááŒá¯áá² áááºááŸááºáááºážáá¯á¶ááŒá¯áá¯ááºááẠáááºážáááºážááᯠá
áááºááŸá¬ááœá±áá²á·áááºá &&áá«áá±ááá·áº á¡áá»á¬ážááŒá®áž áá¡á±á¬ááºááŒááºáá²á·áá«áá°ážá
á¡áá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠááŒá¿áá¬ááᯠá¡áá®ážáá»ááºááᬠááŒá±ááŸááºážááẠáá¯á¶ážááŒááºáá²á·áááº- áá»áœááºá¯ááºá¡á¬áž á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±ážáá«á urls URL ááẠáá¯á¶á
á¶ááŸáá·áº ááá¯ááºáá®ááá·áº á
á¬ááŒá±á¬ááºážáá»á¬ážá áá±á¬ááºáááºááœá² á¡ááŒá±á¡áá±ááœá± áááŸááá² ááŒá
áºáá±áááá·áºáááºá
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%'
á¡á
á¬áž JOIN syntax ááẠáá»áœááºá¯ááºááẠsubquery ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž áá»á²á·ááœááºáá²á·áááºá recording_data.urls array ááœáẠá¡ááŒá±á¡áá±á¡á¬áž ááá¯ááºááá¯ááºá¡áá¯á¶ážáá»ááá¯ááºá
á±ááẠWHERE.
áá®áá±áá¬ááŸá¬ á¡áá±ážááŒá®ážáá¯á¶ážá á¡á²áá«áá«áá²á && áá±ážáá¬ážáá±á¬ ááá·áºááœááºážááŸá¯ááœáẠááá¯ááºáá®áá±á¬ URL áá«ááŸááááŸá á
á
áºáá±ážááẠá¡áá¯á¶ážááŒá¯áááºá á¡áááºážáááºá
áœá±áá«áá á€áá¯ááºáá±á¬ááºáá»ááºááẠarray (ááá¯á·ááá¯áẠááá¬ážáá
áºáá¯áá¡áááºáž) áááŒááºá
ááºáá»á¬ážááŸáá
áºááá·áº ááœá±á·áá»á¬ážáá±áááºááá¯ááœá±á·ááá¯ááºááŒá®áž á¡ááŒá±á¡áá± (ááá¯ááºáá®ááŸá¯) ááá¯ááœá±á·áá±á¬á¡áá« áááºááœá¬ážáááºááŒá
áºáááºá áááºážááᯠáá¬ááŸáááŸááºáááá°ážáá¬áž? ááá¹áá EXISTS.
ááááºážá recording_data.urls subquery context áá²á· ááŒááºáááá± ááá¯ážáá¬ážááá¯á·ááááºá EXISTS subquery ááᯠáááºážááŸáá·áº áá¯ááºááá¯ážáá«á
á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážá ááºááá¯ááºááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá¯á¶áž ááŒá¯ááŒááºáá¬ážáá±á¬ áá±ážááœááºážááᯠáááŸááááº-
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%'
);
ááŒá®ážáá²áá²á· á¡áá»ááẠTime: 1898.717 ms áááºááœáŸá²áááá·áºá¡áá»áááº?!
ááááºáááŒááº! ááááŠážá
áœá¬ ááŸááºáááºááŸá¯ááᯠá
á
áºáá±ážááẠááá¯á¡ááºáá«áááºá áá«á¡ááœááºá¡áááºážáá¶ááááŒá
áºáá²á·áááºá EXISTS á¡á
á±á¬ááá¯ááºážá áááºá
á²ááẠáá¯áá¹áááá±áááᯠááŒá±á¬ááºážáá²ááŒááºážááŒáá·áº ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááŒááºáž áá±á¬ááºážááá¯áá»ááºááœáẠáááºáááºááŸá¬ážááŸá¬ážááá¯ááºáá±á¬ á¡ááŸá¬ážáá
áºáá¯ááᯠáááá·áºáá¬ážááŒá±á¬ááºáž áá±áá»á¬áááºááá¯áááºá
ááá¯ážááŸááºážáá±á¬á
ááºážáááºááŸá¯áá
áºáá¯áá¯ááºáá±á¬ááºáááºááŒá
áºáááºá count(*) ááá°áá®áá±á¬áá±áá¬á¡ááœá²áá»á¬ážá
áœá¬á¡ááœáẠá¡ááŸá±ážááŸáá·áºá¡ááŒááºáá±ážááœááºážááŸá
áºáá¯á
áá¯á¶ážááœááºá ááá¯á·áá±á¬ááºá áá±áá¬á á¡áá±ážá¡ááœáŸá¬ážá¡ááœááºá ááááºáá»á¬ážá¡á¬ážáá¯á¶áž ááŸááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯ááºááá¯áẠá¡áááºááŒá¯áá«áááºá
á ááºážáááºááŸá¯á¡á¬ážáá¯á¶ážááẠá¡ááŒá¯ááá±á¬áá±á¬ááºáá±á¬ ááááºáá»á¬ážááᯠá¡ááŒá²áá±ážáááºá á¡á¬ážáá¯á¶ážááŒááºáááºááŒá®ážáá«ááŒá®á
áááºáááºážá á¬áá»á¬áž
áá®áá¯á¶ááŒááºáá±ážááá± áááºáááºážá á¬áá°á áá¬ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááºá
- Query á¡á á®á¡á ááºáá»á¬ážááẠáá¬ááºáááºážáá áºáá¯áá¯á¶ážááᯠáááŒá±á¬ááŒáá±á¬áºáááºáž áá²ááœááºá áá»á¬ážááᯠáá±ážá áœááºážááá¯ááºáááºá
- á¡ááá áá¶ááááŸááá°ááœá±áᬠá¡ááŒá²áááºáž ááá¬ážáá¶á¡á á áºááœá± ááá¯ááºáá«áá°ážá
- ááŸá±ážááœá±ážáá±á¬áá±ážááœááºážáá»á¬ážááᯠááááºááá¯á·ááŸá¯áá»á¬ážááᯠáá®ážááŒá¬ážááœá²áá¯ááºááá¯ááºáááºá
- ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá¡á¬ážáá¯á¶ážááẠááá¬áááœáẠáá»á±á¬á·áá»ááŒááºážááá¯ááºáá«á
- áá¡áá¯á¶ážááŒá¯ááŸá¯
EXISTááŒá áºááá¯ááºáá»áŸáẠáá¯ááºáá¯ááºá áœááºážá¡á¬áž áááááá¬áᬠááá¯ážáá¬ááá¯ááºáááºá
áá±á¬ááºáá»ááº
áá»áœááºá¯ááºááá¯á·ááẠáá±ážááŒááºážááŸá¯á¡áá»áááºá០~24 áááá áºá០2 á áá¹ááá·áºááá¯á·ááœá¬ážááẠ- áááááá¬áᬠá áœááºážáá±á¬ááºááẠááá¯ážáá¬áá«áááºá á€áá±á¬ááºážáá«ážááẠááŒá®ážááŒá®ážáá¬ážáá¬áž ááœááºáá±á«áºáá¬áá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á· ááŒá¯áá¯ááºáá²á·ááá·áº á ááºážáááºááŸá¯á¡á¬ážáá¯á¶ážááẠáá áºáá±á·áááºážááœáẠááŒá áºáá»ááºáá²á·ááŒá®áž á¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠááŸáá·áº á ááºážáááºááẠá.á áá¬áá®á០á áá¬áá®ááŒá¬áž á¡áá»áááºáá°áá²á·áááºáᯠááá·áºááŸááºážááááºá
SQL ááẠáááºážááá¯áááŒá±á¬ááºáá«á á¡á¶á·ááŒááœááºáá±á¬ááºážáá±á¬áá¬áá¬á áá¬ážáá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºážááá¯áá±á·áá¬ááŒá®ážá¡áá¯á¶ážááŒá¯áááºááŒáá¯ážá á¬ážáá«á SQL queries ááœá±ááᯠáááºááᯠexecute áá¯ááºááá²á database á query plan ááœá±ááᯠáááºááá¯áá¯ááºáá±ážááá²á indexes á¡áá¯ááºáá¯ááºáá¯á¶áá²á· áááºááá¯ááºááœááºáá±áá²á· data á¡ááœááºá¡á á¬ážááᯠáá±á¬ááºážáá±á¬ááºážáá¬ážáááºááŒááºážááŒáá·áºá queries ááᯠoptimize áá¯ááºáá¬ááŸá¬ ááẠá¡ááœááºá¡á±á¬ááºááŒááºááá¯ááºáá«áááºá ááá¯á·áá±á¬áº ááá°áá®áá±á¬áá»ááºážáááºááŸá¯áá»á¬ážááᯠáááºáááºááŒáá¯ážá á¬ážááŒá®áž ááŒá¿áá¬áá»á¬ážááᯠááŒááºážááŸááºážá áœá¬ááœá²ááŒááºážáᬠááááºááá¯á·ááŸá¯áá»á¬ážááá¯ááŸá¬ááœá±ááẠá¡áá®á¡áá»áŸá¡áá±ážááŒá®ážáá«áááºá
á€áá²á·ááá¯á·áá±á¬ááááºáá»á¬ážáááŸáááŒááºážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážá¡ááá¯ááºážááŸá¬ áááá¬áááºááŸá¬ážáá±á¬á ááŒááºáá¬áá±á¬á¡ááŒááºááŸá¯ááºáž ááŒáŸáá·áºáááºááŒááºážááŒá áºááẠ- ááááºá áááºááááá²á·áá±á¬ á¡á á®áááºáá¶á á¬ááẠááá¯áá»ááºáá»ááºážáá®ážáá«ážáááºáá¬áá«áááºá
á¡áá°ážáááºáá»á±ážáá°ážáááºááŸááá«áááºá áá«á·áá²áá±á¬áºáá»á¬áž Aditya Mishra áá¡áááá·áºáá±á¬áºá, Aditya Gauru О áá±á¬ááºááœááºááŒááºážááŸáá·áº Dinkar Pandir áá»áœááºá¯ááºááá¯á·á áá±á¬ááºáá¯á¶ážáá±á¬ááºážááá¯ááŸá¯ááœáẠá¡áá±ážááŒá®ážáá±á¬ á¡ááŸá¬ážáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áá±á¬ááºáá¯á¶ážááœáẠááŸá¯ááºááááºáá®ááœáẠááœá±á·ááŸááááºá
source: www.habr.com
