เจ‡เฉฑเจ• SQL เจœเจพเจ‚เจš เจฆเฉ€ เจ•เจนเจพเจฃเฉ€

เจชเจฟเจ›เจฒเฉ‡ เจฆเจธเฉฐเจฌเจฐ เจตเจฟเฉฑเจš เจฎเฉˆเจจเฉ‚เฉฐ VWO เจธเจนเจพเจ‡เจคเจพ เจŸเฉ€เจฎ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเจฟเจฒเจšเจธเจช เจฌเฉฑเจ— เจฐเจฟเจชเฉ‹เจฐเจŸ เจฎเจฟเจฒเฉ€เฅค เจ‡เฉฑเจ• เจตเฉฑเจกเฉ‡ เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจฒเจˆ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฒเจˆ เจฒเฉ‹เจก เจ•เจฐเจจ เจฆเจพ เจธเจฎเจพเจ‚ เจชเฉเจฐเจคเฉ€เจฌเฉฐเจงเจฟเจค เจฒเฉฑเจ— เจฐเจฟเจนเจพ เจธเฉ€เฅค เจ…เจคเฉ‡ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฎเฉ‡เจฐเฉ€ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐเฉ€ เจฆเจพ เจ–เฉ‡เจคเจฐ เจนเฉˆ, เจฎเฉˆเจ‚ เจคเฉเจฐเฉฐเจค เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจ•เฉ‡เจ‚เจฆเจฐเจฟเจค เจ•เฉ€เจคเจพเฅค

prehistory

เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจ•เจฐเจจ เจฒเจˆ เจ•เจฟ เจฎเฉˆเจ‚ เจ•เจฟเจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚, เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ VWO เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจฆเฉฑเจธเจพเจ‚เจ—เจพ. เจ‡เจน เจ‡เฉฑเจ• เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจนเฉˆ เจœเจฟเจธ เจจเจพเจฒ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸเจพเจ‚ 'เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจจเจฟเจธเจผเจพเจจเจพ เจฎเฉเจนเจฟเฉฐเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹: A/B เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจฆเจพ เจ†เจฏเฉ‹เจœเจจ เจ•เจฐเฉ‹, เจตเจฟเจœเจผเจŸเจฐเจพเจ‚ เจ…เจคเฉ‡ เจชเจฐเจฟเจตเจฐเจคเจจเจพเจ‚ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐเฉ‹, เจตเจฟเจ•เจฐเฉ€ เจซเจจเจฒ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเฉ‹, เจ—เจฐเจฎเฉ€ เจฆเฉ‡ เจจเจ•เจธเจผเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจตเจฟเจœเจผเจฟเจŸ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ—เจพเจ‚ เจšเจฒเจพเจ“เฅค

เจชเจฐ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฌเจพเจฐเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจšเฉ€เจœเจผ เจฐเจฟเจชเฉ‹เจฐเจŸเจฟเฉฐเจ— เจนเฉˆ. เจ‰เจชเจฐเฉ‹เจ•เจค เจธเจพเจฐเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจ†เจชเจธ เจตเจฟเฉฑเจš เจœเฉเฉœเฉ‡ เจนเฉ‹เจ เจนเจจเฅค เจ…เจคเฉ‡ เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจ—เจพเจนเจ•เจพเจ‚ เจฒเจˆ, เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจฎเจพเจคเจฐเจพ เจ‡เฉฑเจ• เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจฌเฉ‡เจ•เจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจœเฉ‹ เจ‡เจธเจจเฉ‚เฉฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ‰เจฆเจพเจนเจฐเจจ เจนเฉˆ:

เจ‰เจนเจจเจพเจ‚ เจฒเฉ‹เจ•เจพเจ‚ เจฒเจˆ <date d1> เจคเฉ‹เจ‚ <date d2> เจคเฉฑเจ• เจชเฉฐเจจเฉ‡ "abc.com" 'เจคเฉ‡ เจธเจพเจฐเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจฆเจฟเจ–เจพเจ“ เจœเฉ‹ Chrome เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเจพเจ‚ (เจฏเฉ‚เจฐเจช เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ†เจˆเจซเฉ‹เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ)

เจฌเฉเจฒเฉ€เจ…เจจ เจ“เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเจฟเจ“เฅค เจ‰เจน เจจเจฎเฉ‚เจจเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ†เจชเจนเฉเจฆเจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ•เจฐเจจ เจฒเจˆ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ—เจพเจนเจ•เจพเจ‚ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเจจเฅค

เจนเฉŒเจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€

เจชเฉเจฐเจธเจผเจจ เจตเจฟเฉฑเจš เจ—เจพเจนเจ• เจ•เฉเจ เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐ เจฐเจฟเจนเจพ เจธเฉ€ เจœเฉ‹ เจ…เจจเฉเจญเจตเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

เจ‰เจนเจจเจพเจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจธเจพเจฐเฉ‡ เจธเฉˆเจธเจผเจจ เจฐเจฟเจ•เจพเจฐเจก เจฆเจฟเจ–เจพเจ“ เจœเฉ‹ "/jobs" เจตเจพเจฒเฉ‡ URL เจตเจพเจฒเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ เจ—เจ เจธเจจเฅค

เจ‡เจธ เจธเจพเจˆเจŸ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจธเฉ€ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจฎเจฟเจฒเฉ€เจ…เจจ เจคเฉ‹เจ‚ เจตเฉฑเจง เจตเจฟเจฒเฉฑเจ–เจฃ 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. urls: เจฌเจนเฉเจค เจตเฉฑเจกเฉ‡ 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" เจธเจพเจฐเฉ‡ URL เจตเจพเจฒเฉ€ เจธเจพเจฐเจฃเฉ€ เจฆเจพ เจนเจตเจพเจฒเจพ เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš "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 เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ–เฉ‹เจœ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจธเจฟเจฐเจซเจผ เจ†เจˆ.เจกเฉ€ 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 เจ‡เฉฑเจ• เจธเจผเจพเจจเจฆเจพเจฐ เจญเจพเจธเจผเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเฉ‹เจ‚ เจจเจพ เจกเจฐเฉ‹, เจชเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฟเฉฑเจ–เจฃ เจ…เจคเฉ‡ เจตเจฐเจคเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹เฅค SQL เจธเจตเจพเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจœเจฟเจธ เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจคเฉเจธเฉ€เจ‚ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹, เจ‰เจธ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ€ เจšเฉฐเจ—เฉ€ เจธเจฎเจ เจนเฉ‹เจฃ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจธเจตเจพเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเจซเจฒ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจตเฉฑเจ–-เจตเฉฑเจ– เจชเจนเฉเฉฐเจšเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจœเจผเจฎเจพเจ‰เจฃเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฃเจพ เจ…เจคเฉ‡ เจฐเฉเจ•เจพเจตเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉฑเจญเจฆเฉ‡ เจนเฉ‹เจ เจนเฉŒเจฒเฉ€ เจนเฉŒเจฒเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจคเฉ‹เฉœเจจเจพ เจตเฉ€ เจฌเจฐเจพเจฌเจฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค

เจ‡เจนเจจเจพเจ‚ เจตเจฐเจ—เฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจนเจฟเฉฑเจธเจพ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ—, เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃ เจตเจพเจฒเฉ€ เจ—เจคเฉ€ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจนเฉˆ - เจœเจฟเฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจฐเจŸ เจœเฉ‹ เจชเจนเจฟเจฒเจพเจ‚ เจฒเฉ‹เจก เจตเฉ€ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจธเฉ€ เจนเฉเจฃ เจฒเจ—เจญเจ— เจคเฉเจฐเฉฐเจค เจฒเฉ‹เจก เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค

เจฆเจพ เจตเจฟเจธเจผเฉ‡เจธเจผ เจงเฉฐเจจเจตเจพเจฆ เจ•เฉ€เจคเจพ เจฎเฉ‡เจฐเฉ‡ เจธเจพเจฅเฉ€เจ“ เจ†เจฆเจฟเจคเจฟเจ† เจฎเจฟเจธเจผเจฐเจพ เจฆเฉ‡ เจนเฉเจ•เจฎ 'เจคเฉ‡เจ†เจฆเจฟเจคเจฟเจ† เจ—เฉŒเจฐเฉ‚ ะธ เจตเจฐเฉเจฃ เจฎเจฒเจนเฉ‹เจคเจฐเจพ เจฌเฉเจฐเฉ‡เจจเจธเจŸเจพเจฐเจฎเจฟเฉฐเจ— เจฒเจˆ เจ…เจคเฉ‡ เจฆเจฟเจจเจ•เจฐ เจชเฉฐเจกเฉ€เจฐ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ‡เจธ เจจเฉ‚เฉฐ เจ…เจฒเจตเจฟเจฆเจพ เจ•เจนเจฟเจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจพเจกเฉ€ เจ…เฉฐเจคเจฎ เจฌเฉ‡เจจเจคเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจฃ เจ—เจฒเจคเฉ€ เจฒเฉฑเจญเจฃ เจฒเจˆ!

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹