เชเช• SQL เชคเชชเชพเชธเชจเซ€ เชตเชพเชฐเซเชคเชพ

เช—เชฏเชพ เชกเชฟเชธเซ‡เชฎเซเชฌเชฐเชฎเชพเช‚ เชฎเชจเซ‡ VWO เชธเชชเซ‹เชฐเซเชŸ เชŸเซ€เชฎ เชคเชฐเชซเชฅเซ€ เชเช• เชฐเชธเชชเซเชฐเชฆ เชฌเช— เชฐเชฟเชชเซ‹เชฐเซเชŸ เชฎเชณเซเชฏเซ‹ เชนเชคเซ‹. เชฎเซ‹เชŸเชพ เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชŸ เช•เซเชฒเชพเชฏเชจเซเชŸ เชฎเชพเชŸเซ‡ เชเชจเชพเชฒเชฟเชŸเชฟเช•เซเชธ เชฐเชฟเชชเซ‹เชฐเซเชŸเซเชธเชฎเชพเช‚เชฅเซ€ เชเช• เชฎเชพเชŸเซ‡ เชฒเซ‹เชก เชฅเชตเชพเชจเซ‹ เชธเชฎเชฏ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เชฒเชพเช—เชคเซ‹ เชนเชคเซ‹. เช…เชจเซ‡ เช† เชฎเชพเชฐเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ เชนเซ‹เชตเชพเชฅเซ€, เชฎเซ‡เช‚ เชคเชฐเชค เชœ เชธเชฎเชธเซเชฏเชพเชจเชพ เช‰เช•เซ‡เชฒ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเซเชฏเซเช‚.

เชชเซเชฐเชพเช—เซˆเชคเชฟเชนเชพเชธเชฟเช•

เชนเซเช‚ เชœเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เชคเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชคเชฎเชจเซ‡ VWO เชตเชฟเชถเซ‡ เชฅเซ‹เชกเซเช‚ เช•เชนเซ€เชถ. เช† เชเช• เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช›เซ‡ เชœเซ‡เชจเซ€ เชฎเชฆเชฆเชฅเซ€ เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชตเซ‡เชฌเชธเชพเช‡เชŸเซเชธ เชชเชฐ เชตเชฟเชตเชฟเชง เชฒเช•เซเชทเชฟเชค เชเซเช‚เชฌเซ‡เชถ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹: A/B เชชเซเชฐเชฏเซ‹เช—เซ‹ เช•เชฐเซ‹, เชฎเซเชฒเชพเช•เชพเชคเซ€เช“ เช…เชจเซ‡ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃเซ‹เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเซ‹, เชตเซ‡เชšเชพเชฃ เชซเชจเชฒเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‹, เชนเซ€เชŸ เชจเช•เชถเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‹ เช…เชจเซ‡ เชฎเซเชฒเชพเช•เชพเชค เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เชšเชฒเชพเชตเซ‹.

เชชเชฐเช‚เชคเซ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชถเซ‡เชจเซ€ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชจเซ€ เชตเชธเซเชคเซ เชฐเชฟเชชเซ‹เชฐเซเชŸเชฟเช‚เช— เช›เซ‡. เช‰เชชเชฐเซ‹เช•เซเชค เชคเชฎเชพเชฎ เช•เชพเชฐเซเชฏเซ‹ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡. เช…เชจเซ‡ เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชŸ เช•เซเชฒเชพเชฏเชจเซเชŸเซเชธ เชฎเชพเชŸเซ‡, เชฎเชพเชนเชฟเชคเซ€เชจเซ‹ เชตเชฟเชถเชพเชณ เชœเชฅเซเชฅเซ‹ เชเช• เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชจเชพ เชจเช•เชพเชฎเซเช‚ เชนเชถเซ‡ เชœเซ‡ เชคเซ‡เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡.

เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เชฎเซ‹เชŸเชพ เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชชเชฐ เชฐเซ‡เชจเซเชกเชฎ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช…เชนเซ€เช‚ เชเช• เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡:

เชชเซƒเชทเซเช  "abc.com" เชชเชฐเชจเซ€ เชฌเชงเซ€ เช•เซเชฒเชฟเช•เซเชธ เชฌเชคเชพเชตเซ‹
 เชฅเซ€  เชธเซเชงเซ€
เชœเซ‡ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡
Chrome เช…เชฅเชตเชพ เชตเชชเชฐเชพเชฏเซ‡เชฒ
(เชฏเซเชฐเซ‹เชชเชฎเชพเช‚ เชนเชคเชพ เช…เชจเซ‡ iPhone เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชนเชคเชพ)

เชฌเซเชฒเชฟเชฏเชจ เช“เชชเชฐเซ‡เชŸเชฐเซ‹ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ‹. เชจเชฎเซ‚เชจเชพเช“ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เช“ เชฎเชจเชธเซเชตเซ€ เชฐเซ€เชคเซ‡ เชœเชŸเชฟเชฒ เชชเซเชฐเชถเซเชจเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เช•เซเชฒเชพเชฏเชจเซเชŸ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เช›เซ‡.

เชงเซ€เชฎเซ€ เชตเชฟเชจเช‚เชคเซ€

เชชเซเชฐเชถเซเชจเชฎเชพเช‚ เช•เซเชฒเชพเชฏเช‚เชŸ เช•เช‚เชˆเช• เชเชตเซเช‚ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เชนเชคเซ‹ เช•เซ‡ เชœเซ‡ เชธเชพเชนเชœเชฟเช• เชฐเซ€เชคเซ‡ เชเชกเชชเชฅเซ€ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡:

เชฌเชงเชพ เชธเชคเซเชฐ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช—เซเชธ เชฌเชคเชพเชตเซ‹
เช•เซ‹เชˆเชชเชฃ เชชเซƒเชทเซเช เชจเซ€ เชฎเซเชฒเชพเช•เชพเชค เชฒเซ‡เชจเชพเชฐเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡
URL เชธเชพเชฅเซ‡ เชœเซเชฏเชพเช‚ "/jobs" เช›เซ‡

เช† เชธเชพเช‡เชŸ เชชเชฐ เชเช• เชŸเชจ เชŸเซเชฐเชพเชซเชฟเช• เชนเชคเซ‹ เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชเช• เชฎเชฟเชฒเชฟเชฏเชจเชฅเซ€ เชตเชงเซ เช…เชจเชจเซเชฏ URL เชธเซเชŸเซ‹เชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เชนเชคเชพเช‚. เช…เชจเซ‡ เชคเซ‡เช“ เชเช•เชฆเชฎ เชธเชฐเชณ URL เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เชถเซ‹เชงเชตเชพ เชฎเชพเช—เชคเชพ เชนเชคเชพ เชœเซ‡ เชคเซ‡เชฎเชจเชพ เชฌเชฟเชเชจเซ‡เชธ เชฎเซ‹เชกเชฒเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชนเซ‹เชฏ.

เชชเซเชฐเชพเชฅเชฎเชฟเช• เชคเชชเชพเชธ

เชšเชพเชฒเซ‹ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชถเซเช‚ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช. เชจเซ€เชšเซ‡ เชฎเซ‚เชณ เชงเซ€เชฎเซ€ 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

เช•เซเชตเซ‡เชฐเซ€ 150 เชนเชœเชพเชฐ เชชเช‚เช•เซเชคเชฟเช“ เช•เซเชฐเซ‹เชฒ เช•เชฐเซ€. เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชฐเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชฐเชธเชชเซเชฐเชฆ เชตเชฟเช—เชคเซ‹ เชฆเชฐเซเชถเชพเชตเซ€, เชชเชฐเช‚เชคเซ เช•เซ‹เชˆ เชธเซเชชเชทเซเชŸ เช…เชกเชšเชฃเซ‹ เชจเชฅเซ€.

เชšเชพเชฒเซ‹ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เชตเชงเซ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ€เช. เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡ เช•เชฐเซ‡ เช›เซ‡ JOIN เชคเซเชฐเชฃ เช•เซ‹เชทเซเชŸเช•เซ‹:

  1. เชธเชคเซเชฐเซ‹: เชธเชคเซเชฐ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡: เชฌเซเชฐเชพเช‰เชเชฐ, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเชœเชจเซเชŸ, เชฆเซ‡เชถ, เชตเช—เซ‡เชฐเซ‡.
  2. เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช—_เชกเซ‡เชŸเชพ: เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเซ‡เชฒ URL, เชชเซƒเชทเซเช เซ‹, เชฎเซเชฒเชพเช•เชพเชคเซ‹เชจเซ‹ เชธเชฎเชฏเช—เชพเชณเซ‹
  3. url: เช…เชคเซเชฏเช‚เชค เชฎเซ‹เชŸเชพ URL เชจเซ‡ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸ เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชเช• เช…เชฒเช— เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ€เช เช›เซ€เช.

เช เชชเชฃ เชจเซ‹เช‚เชง เชฒเซ‹ เช•เซ‡ เช…เชฎเชพเชฐเชพ เชฌเชงเชพ เช•เซ‹เชทเซเชŸเช•เซ‹ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชœเชฟเชค เช›เซ‡ account_id. เช† เชฐเซ€เชคเซ‡, เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชœเซเชฏเชพเช‚ เชเช• เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเซ‹เชŸเซเช‚ เชเช•เชพเช‰เชจเซเชŸ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‡ เชฌเชพเช•เชพเชค เชฐเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช•เชกเซ€เช“ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เชจเชœเซ€เช•เชจเชพ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เชชเชฐ, เช…เชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช เช•เซ‡ เชšเซ‹เช•เซเช•เชธ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เช•เช‚เชˆเช• เช–เซ‹เชŸเซเช‚ เช›เซ‡. เช† เชฒเชพเช‡เชจเชจเซ‡ เชจเชœเซ€เช•เชฅเซ€ เชœเซ‹เชตเชพเชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชตเชพเชจ เช›เซ‡:

urls && array(
	select id from acc_{account_id}.urls 
	where url  ILIKE  '%enterprise_customer.com/jobs%'
)::text[]

เชชเซเชฐเชฅเชฎ เชตเชฟเชšเชพเชฐ เชนเชคเซ‹ เช•เซ‡ เช•เชฆเชพเชš เช•เชพเชฐเชฃ เช•เซ‡ ILIKE เช† เชฌเชงเชพ เชฒเชพเช‚เชฌเชพ URL เชชเชฐ (เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ 1,4 เชฎเชฟเชฒเชฟเชฏเชจเชฅเซ€ เชตเชงเซ เช›เซ‡ เช…เชจเชจเซเชฏ เช† เชเช•เชพเช‰เชจเซเชŸ เชฎเชพเชŸเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชพเชฏเซ‡เชฒ 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เชคเชฆเซเชฆเชจ เชเชกเชชเซ€ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

เชถเช‚เช•เชพเชธเซเชชเชฆ เชตเชฐเซเชคเซเชณเชจเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช•เชฐเชตเซเช‚

เชนเซเช‚ เช•เซ‹เชˆเชชเชฃ เชธเช‚เชญเชตเชฟเชค เชชเซเชฐเชฆเชฐเซเชถเชจ เชธเซเชงเชพเชฐเชฃเชพเช“ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชฌเชฆเชฒเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เชนเชคเซ‹. เชฎเชพเชฐเซ€ เชŸเซ€เชฎ เช…เชจเซ‡ เชฎเซ‡เช‚ 2 เชฎเซเช–เซเชฏ เชตเชฟเชšเชพเชฐเซ‹ เชตเชฟเช•เชธเชพเชตเซเชฏเชพ:

  • เชธเชฌเช•เซเชตเซ‡เชฐเซ€ URL เชฎเชพเชŸเซ‡ EXISTS เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹: URL เชฎเชพเชŸเซ‡ เชธเชฌเช•เซเชตเซ‡เชฐเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เช…เชฎเซ‡ เชซเชฐเซ€เชฅเซ€ เชคเชชเชพเชธเชตเชพ เชฎเชพเช—เซ€เช เช›เซ€เช. เช† เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพเชจเซ€ เชเช• เชฐเซ€เชค เช›เซ‡ เชซเช•เซเชค เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ 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

เชญเชฒเซ‡ เชนเชพ. เชธเชฌเช•เซเชตเซ‡เชฐเซ€ เชœเซเชฏเชพเชฐเซ‡ เช†เชตเชฐเชฟเชค เชนเซ‹เชฏ EXISTS, เชฌเชงเซเช‚ เชธเซเชชเชฐ เชซเชพเชธเซเชŸ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช†เช—เชพเชฎเซ€ เชคเชพเชฐเซเช•เชฟเช• เชชเซเชฐเชถเซเชจ เชถเชพ เชฎเชพเชŸเซ‡ เชธเชพเชฅเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช›เซ‡ JOIN-ami เช…เชจเซ‡ เชธเชฌเช•เซเชตเซ‡เชฐเซ€ เชชเซ‹เชคเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡ เชเชกเชชเซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเช•เชธเชพเชฅเซ‡ เชญเชฏเช‚เช•เชฐ เชฐเซ€เชคเซ‡ เชงเซ€เชฎเซเช‚ เช›เซ‡?

  • เชธเชฌเช•เซเชตเซ‡เชฐเซ€ CTE เชชเชฐ เช–เชธเซ‡เชกเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช : เชœเซ‹ เช•เซเชตเซ‡เชฐเซ€ เชคเซ‡เชจเชพ เชชเซ‹เชคเชพเชจเชพ เชชเชฐ เชเชกเชชเซ€ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชชเชนเซ‡เชฒเชพ เชเชกเชชเซ€ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชฎเซเช–เซเชฏ เช•เซเชตเซ‡เชฐเซ€ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

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 เชฎเชพเชคเซเชฐ เชธเซเชงเชพเชฐเซ‡เชฒ เชชเซเชฐเชฆเชฐเซเชถเชจ && เชงเซ€เชฎเซ€ เช•เซเชตเซ‡เชฐเซ€เชจเชพเช‚ เชคเชฎเชพเชฎ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เชเช•เชฎเชพเชคเซเชฐ เชฌเชพเช•เซ€ เชฐเชนเซ‡เชฒเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชชเชฐเชฟเชฌเชณ เชนเชคเซเช‚.

เชจเซ€ เชธเชพเชฎเซ‡ เชœเซ‹เชˆเชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ, เช†เชชเชฃเซ‡ เชคเซ‡ เชœเซ‹เชˆเช เช›เซ€เช && เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชฌเซ‡ เชเชฐเซ‡ เชตเชšเซเชšเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชคเชคเซเชตเซ‹ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡.

เชฎเซ‚เชณ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เช† เช›เซ‡:

AND  (  urls &&  array(select id from acc_{account_id}.urls where url  ILIKE  '%enterprise_customer.com/jobs%')::text[]   )

เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ URLs เชชเชฐ เชชเซ‡เชŸเชฐเซเชจ เชถเซ‹เชง เช•เชฐเซ€เช เช›เซ€เช, เชชเช›เซ€ เชธเชพเชฎเชพเชจเซเชฏ เชชเซ‹เชธเซเชŸเซเชธ เชธเชพเชฅเซ‡เชจเชพ เชคเชฎเชพเชฎ 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 เชเชกเชชเซ€ เช›เซ‡ เช…เชจเซ‡ เชธเชฌเช•เซเชตเซ‡เชฐเซ€เช เชเชกเชชเซ€ เช›เซ‡, เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชธเซเชคเซ เชฌเชพเช•เซ€ เชนเชคเซ€ && เช“เชชเชฐเซ‡เชŸเชฐ

เช† เชฎเชพเชคเซเชฐ เชเช• เช•เซ€ เช“เชชเชฐเซ‡เชถเชจ เช›เซ‡. เชชเซ‡เชŸเชฐเซเชจ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ‡ เชนเช‚เชฎเซ‡เชถเชพ URL เชจเชพ เชธเชฎเช—เซเชฐ เช…เช‚เชคเชฐเซเช—เชค เช•เซ‹เชทเซเชŸเช•เชจเซ‡ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเชพเชฐเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช†เช‚เชคเชฐเช›เซ‡เชฆ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชฎเซ‡ เชธเซ€เชงเชพ URL เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชงเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชซเช•เซเชค ID เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‡ เช›เซ‡ urls.

เช‰เช•เซ‡เชฒเชจเชพ เชฎเชพเชฐเซเช— เชชเชฐ

&& เชงเซ€เชฎเซเช‚ เช•เชพเชฐเชฃ เช•เซ‡ เชฌเช‚เชจเซ‡ เชธเซ‡เชŸ เชตเชฟเชถเชพเชณ เช›เซ‡. เชœเซ‹ เชนเซเช‚ เชฌเชฆเชฒเซ€เชถ เชคเซ‹ เช“เชชเชฐเซ‡เชถเชจ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชเชกเชชเซ€ เชฅเชถเซ‡ urls เชชเชฐ { "http://google.com/", "http://wingify.com/" }.

เชฎเซ‡เช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธเชฎเชพเช‚ เชธเซ‡เชŸ เช‡เชจเซเชŸเชฐเชธเซ‡เช•เซเชถเชจ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชค เชถเซ‹เชงเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚ &&, เชชเชฐเช‚เชคเซ เช˜เชฃเซ€ เชธเชซเชณเชคเชพ เชตเชฟเชจเชพ.

เช…เช‚เชคเซ‡, เช…เชฎเซ‡ เชซเช•เซเชค เชเช•เชฒเชคเชพเชฎเชพเช‚ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚: เชฎเชจเซ‡ เชฌเชงเซเช‚ เช†เชชเซ‹ 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 เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชฎเซ‡เช‚ เชนเชฎเชฃเชพเช‚ เชœ เชธเชฌเช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช…เชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซเชฏเซเช‚ recording_data.urls เชเชฐเซ‡ เช•เซ‡ เชœเซ‡เชฅเซ€ เชคเชฎเซ‡ เชธเซ€เชงเซ€ เชฐเซ€เชคเซ‡ เชถเชฐเชค เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เซ‹ WHERE.

เช…เชนเซ€เช‚ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชจเซ€ เชฌเชพเชฌเชค เช เช›เซ‡ เช•เซ‡ && เช†เชชเซ‡เชฒ เชเชจเซเชŸเซเชฐเซ€เชฎเชพเช‚ เชฎเซ‡เชณ เช–เชพเชคเซเช‚ URL เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เชฅเซ‹เชกเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€ เชเซ€เชฃเซ€. เชถเซเช‚ เชคเชฎเชจเซ‡ เช•เช‚เชˆเชชเชฃ เชฏเชพเชฆ เชจเชฅเซ€ เช†เชตเชคเซเช‚? เชนเชพ, EXISTS.

เชคเซเชฏเชพเชฐเชฅเซ€ recording_data.urls เชธเชฌเช•เซเชตเซ‡เชฐเซ€ เชธเช‚เชฆเชฐเซเชญเชจเซ€ เชฌเชนเชพเชฐเชฅเซ€ เชธเช‚เชฆเชฐเซเชญเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เช†เชตเซเช‚ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชœเซ‚เชจเชพ เชฎเชฟเชคเซเชฐ เชชเชฐ เชชเชพเช›เชพ เชชเชกเซ€ เชถเช•เซ€เช เช›เซ€เช 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%'
    );

เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชฒเซ€เชก เชธเชฎเชฏ Time: 1898.717 ms เช‰เชœเชตเชฃเซ€ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ?!?

เชเชŸเชฒเซเช‚ เชเชกเชชเซ€ เชจเชฅเซ€! เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ‡ เชถเซเชฆเซเชงเชคเชพ เชคเชชเชพเชธเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชนเซเช‚ เช…เชคเซเชฏเช‚เชค เชถเช‚เช•เชพเชธเซเชชเชฆ เชนเชคเซ‹ EXISTS เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชคเชฐเซเช•เชจเซ‡ เชชเชนเซ‡เชฒเชพ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช•เซ‡ เช…เชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เช•เซ‹เชˆ เช…เชธเซเชชเชทเซเชŸ เชญเซ‚เชฒ เช‰เชฎเซ‡เชฐเซ€ เชจเชฅเซ€.

เชเช• เชธเชฐเชณ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชนเชคเซ€ count(*) เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชฎเชพเชŸเซ‡ เชงเซ€เชฎเซ€ เช…เชจเซ‡ เชเชกเชชเซ€ เชฌเช‚เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เช เชชเชฐ. เชชเช›เซ€, เชกเซ‡เชŸเชพเชจเชพ เชจเชพเชจเชพ เชธเชฌเชธเซ‡เชŸ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชšเช•เชพเชธเซเชฏเซเช‚ เช•เซ‡ เชฌเชงเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชพเชšเชพ เชนเชคเชพ.

เชฌเชงเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชธเชคเชค เชนเช•เชพเชฐเชพเชคเซเชฎเช• เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช†เชชเซ‡ เช›เซ‡. เช…เชฎเซ‡ เชฌเชงเซเช‚ เช เซ€เช• เช•เชฐเซเชฏเซเช‚!

เชชเชพเช  เชถเซ€เช–เซเชฏเชพ

เช† เชตเชพเชฐเซเชคเชพเชฎเชพเช‚เชฅเซ€ เช˜เชฃเชพ เชชเชพเช  เชถเซ€เช–เชตเชพ เชœเซ‡เชตเชพ เช›เซ‡:

  1. เช•เซเชตเซ‡เชฐเซ€ เชฏเซ‹เชœเชจเชพเช“ เช†เช–เซ€ เชตเชพเชฐเซเชคเชพ เช•เชนเซ‡เชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เช“ เชธเช‚เช•เซ‡เชคเซ‹ เช†เชชเซ€ เชถเช•เซ‡ เช›เซ‡
  2. เชฎเซเช–เซเชฏ เชถเช‚เช•เชพเชธเซเชชเชฆเซ‹ เชนเช‚เชฎเซ‡เชถเชพ เชตเชพเชธเซเชคเชตเชฟเช• เช—เซเชจเซ‡เช—เชพเชฐเซ‹ เชนเซ‹เชคเชพ เชจเชฅเซ€
  3. เช…เชตเชฐเซ‹เชงเซ‹เชจเซ‡ เช…เชฒเช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชงเซ€เชฎเซ€ เช•เซเชตเซ‡เชฐเซ€เชเชจเซ‡ เชคเซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡
  4. เชฌเชงเชพ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชชเซเชฐเช•เซƒเชคเชฟเชฎเชพเช‚ เช˜เชŸเชพเชกเชพเชตเชพเชณเชพ เชจเชฅเซ€
  5. เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ EXIST, เชœเซเชฏเชพเช‚ เชถเช•เซเชฏ เชนเซ‹เชฏ, เช‰เชคเซเชชเชพเชฆเช•เชคเชพเชฎเชพเช‚ เชจเชพเชŸเซเชฏเชพเชคเซเชฎเช• เชตเชงเชพเชฐเซ‹ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡

เชจเชฟเชทเซเช•เชฐเซเชท

เช…เชฎเซ‡ ~24 เชฎเชฟเชจเชฟเชŸเชจเชพ เช•เซเชตเซ‡เชฐเซ€ เชธเชฎเชฏเชฅเซ€ 2 เชธเซ‡เช•เชจเซเชก เชธเซเชงเซ€ เช—เชฏเชพ - เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เช•เชพเชฎเช—เซ€เชฐเซ€เชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชตเชงเชพเชฐเซ‹! เชœเซ‹ เช•เซ‡ เช† เชฒเซ‡เช– เชฎเซ‹เชŸเซ‹ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซ‹ เช›เซ‡, เช…เชฎเซ‡ เช•เชฐเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชชเซเชฐเชฏเซ‹เช—เซ‹ เชเช• เชœ เชฆเชฟเชตเชธเชฎเชพเช‚ เชฅเชฏเชพ เช›เซ‡ เช…เชจเซ‡ เชเชตเซ‹ เช…เช‚เชฆเชพเชœ เช›เซ‡ เช•เซ‡ เชคเซ‡เชฎเชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ 1,5 เชฅเซ€ 2 เช•เชฒเชพเช• เชœเซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹ เช›เซ‡.

SQL เช เชเช• เช…เชฆเซเชญเซเชค เชญเชพเชทเชพ เช›เซ‡ เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชกเชฐเชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‡ เชถเซ€เช–เชตเชพเชจเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹. เชเชธเช•เซเชฏเซเชเชฒ เช•เซเชตเซ‡เชฐเซ€เช เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เชฅเชพเชฏ เช›เซ‡, เชกเซ‡เชŸเชพเชฌเซ‡เช เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡, เชˆเชจเซเชกเซ‡เช•เซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเซ‡ เชœเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹ เชคเซ‡เชจเชพ เช•เชฆเชจเซ€ เชธเชพเชฐเซ€ เชธเชฎเชœ เชฎเซ‡เชณเชตเซ€เชจเซ‡, เชคเชฎเซ‡ เช•เซเชตเซ‡เชฐเซ€เชเชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชธเชซเชณ เชฅเชˆ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เช•เซ‡, เชตเชฟเชตเชฟเชง เช…เชญเชฟเช—เชฎเซ‹ เช…เชœเชฎเชพเชตเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เชตเซเช‚ เช…เชจเซ‡ เช…เชตเชฐเซ‹เชงเซ‹เชจเซ‡ เชถเซ‹เชงเซ€เชจเซ‡ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชคเซ‹เชกเซ€ เชชเชพเชกเชตเซ€ เชคเซ‡ เชเชŸเชฒเซเช‚ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เช†เชจเชพ เชœเซ‡เชตเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡เชจเซ‹ เชถเซเชฐเซ‡เชทเซเช  เชญเชพเช— เช เชจเซ‹เช‚เชงเชจเซ€เชฏ, เชฆเซƒเชถเซเชฏเชฎเชพเชจ เช—เชคเชฟ เชธเซเชงเชพเชฐเชฃเชพ เช›เซ‡ - เชœเซเชฏเชพเช‚ เชเช• เช…เชนเซ‡เชตเชพเชฒ เชœเซ‡ เช…เช—เชพเช‰ เชฒเซ‹เชก เชฅเชคเซ‹ เชจ เชนเชคเซ‹ เชคเซ‡ เชนเชตเซ‡ เชฒเช—เชญเช— เชคเชฐเชค เชœ เชฒเซ‹เชก เชฅเชพเชฏ เช›เซ‡.

เชจเซ‹ เช–เชพเชธ เช†เชญเชพเชฐ เชฎเชพเชฐเชพ เชธเชพเชฅเซ€เช“ เช†เชฆเชฟเชคเซเชฏ เชฎเชฟเชถเซเชฐเชพเชจเชพ เช†เชฆเซ‡เชถ เชชเชฐเช†เชฆเชฟเชคเซเชฏ เช—เซŒเชฐเซ ะธ เชตเชฐเซเชฃ เชฎเชฒเซเชนเซ‹เชคเซเชฐเชพ เชฎเช‚เชฅเชจ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชฆเชฟเชจเช•เชฐ เชชเช‚เชกเชฟเชฐ เช…เชฎเซ‡ เช†เช–เชฐเซ‡ เชคเซ‡เชจเซ‡ เชตเชฟเชฆเชพเชฏ เช†เชชเซ€เช เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เช…เชฎเชพเชฐเซ€ เช…เช‚เชคเชฟเชฎ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชญเซ‚เชฒ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹