ื“ื™ ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ืื™ื™ืŸ SQL ื•ื™ืกืคืึธืจืฉื•ื ื’

ืœืขืฆื˜ืข ื“ืขืฆืขืžื‘ืขืจ ืื™ืš ื‘ืืงื•ืžืขืŸ ืึท ื˜ืฉื™ืงืึทื•ื•ืข ื–ืฉื•ืง ื‘ืึทืจื™ื›ื˜ ืคื•ืŸ ื“ื™ VWO ืฉื˜ื™ืฆืŸ ืžืึทื ืฉืึทืคึฟื˜. ื“ื™ ืœืึธื•ื“ื™ื ื’ ืฆื™ื™ื˜ ืคึฟืึทืจ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืึทื ืึทืœื™ื˜ื™ืงืก ืจื™ืคึผืึธืจืฅ ืคึฟืึทืจ ืึท ื’ืจื•ื™ืก ืคึฟื™ืจืžืข ืงืœื™ืขื ื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผืจืึธื•ื›ื™ื‘ืึทื˜ื™ื•ื•. ืื•ืŸ ื–ื™ื ื˜ ื“ืึธืก ืื™ื– ืžื™ื™ืŸ ื’ืขื’ื ื˜ ืคื•ืŸ ืคึฟืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขื›ืงื™ื™ื˜, ืื™ืš ืžื™ื“ ืคืึธื•ืงื™ืกื˜ ืื•ื™ืฃ ืกืึทืœื•ื•ื™ื ื’ ื“ื™ ืคึผืจืึธื‘ืœืขื.

ืคึผืจืขื”ื™ืกื˜ืึธืจื™

ืฆื• ืžืึทื›ืŸ ืขืก ืงืœืึธืจ ื•ื•ืึธืก ืื™ืš ื‘ื™ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ, ืื™ืš ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ืึท ื‘ื™ืกืœ ื•ื•ืขื’ืŸ ื•ื•ื•ื•ืึธ. ื“ืึธืก ืื™ื– ืึท ืคึผืœืึทื˜ืคืึธืจืžืข ืžื™ื˜ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืงืึทื˜ืขืจ ืคืึทืจืฉื™ื“ืŸ ื˜ืึทืจื’ืขื˜ืขื“ ืงืึทืžืคึผื™ื™ื ื– ืื•ื™ืฃ ื“ื™ื™ืŸ ื•ื•ืขื‘ืกื™ื˜ืขืก: ืึธื ืคื™ืจืŸ ืึท / ื‘ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ, ืฉืคึผื•ืจ ื•ื•ื™ื–ืึทื˜ืขืจื– ืื•ืŸ ืงืึทื ื•ื•ืขืจื–ืฉืึทื ื–, ืึทื ืึทืœื™ื™ื– ื“ื™ ืคืืจืงื•ื™ืคื•ื ื’ ืœื™ื™ืงืข, ืึทืจื•ื™ืกื•ื•ื™ื™ึทื–ืŸ ื”ื™ืฅ ืžืึทืคึผืก ืื•ืŸ ืฉืคึผื™ืœ ื•ื•ื™ื–ื™ื˜ ืจืขืงืึธืจื“ื™ื ื’ืก.

ืึธื‘ืขืจ ื“ื™ ืžืขืจืกื˜ ื•ื•ื™ื›ื˜ื™ืง ื–ืึทืš ื•ื•ืขื’ืŸ ื“ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข ืื™ื– ืจื™ืคึผืึธืจื˜ื™ื ื’. ืึทืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืื•ื™ื‘ืŸ ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ื™ื ื˜ืขืจืงืึทื ืขืงื˜ื™ื“. ืื•ืŸ ืคึฟืึทืจ ืคึฟื™ืจืžืข ืงืœื™ื™ืึทื ืฅ, ืึท ืจื™ื–ื™ืง ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืคืฉื•ื˜ ืึทืจื•ื™ืกื’ืขื•ื•ืึธืจืคืŸ ืึธืŸ ืึท ืฉื˜ืึทืจืง ืคึผืœืึทื˜ืคืึธืจืžืข ื•ื•ืึธืก ื’ื™ื˜ ืขืก ืื™ืŸ ืึทื ืึทืœื™ื˜ื™ืงืก ืคืึธืจืขื.

ื ื™ืฆืŸ ื“ื™ ืคึผืœืึทื˜ืคืึธืจืžืข, ืื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืึท ื˜ืจืึทืค ืึธื ืคึฟืจืขื’ ืื•ื™ืฃ ืึท ื’ืจื•ื™ืก ื“ืึทื˜ืŸ ืฉื˜ืขืœืŸ. ื“ืึธ ืก ืึท ืคึผืฉื•ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ:

ื•ื•ื™ื™ึทื–ืŸ ืึทืœืข ืงืœื™ืงืก ืื•ื™ืฃ ื‘ืœืึทื˜ "abc.com" ืคึฟื•ืŸ <ื“ืึทื˜ืข ื“1> ืฆื• <ื“ืึทื˜ืข ื“2> ืคึฟืึทืจ ืžืขื ื˜ืฉืŸ ื•ื•ืึธืก ื”ืึธื‘ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืงืจืึธื•ื ืึธื“ืขืจ (ืœื™ื’ืŸ ืื™ืŸ ืื™ื™ืจืึธืคึผืข ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืึท iPhone)

ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜ ืฆื• ื‘ื•ืœื™ืึทืŸ ืึธืคึผืขืจื™ื™ื˜ืขืจื–. ื–ื™ื™ ื–ืขื ืขืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜ ืคึฟืึทืจ ืงืœื™ื™ืึทื ืฅ ืื™ืŸ ื“ื™ ืึธื ืคึฟืจืขื’ ืฆื•ื‘ื™ื ื“ ืฆื• ืžืึทื›ืŸ ืึทืจื‘ื™ื˜ืจืขืจืึทืœื™ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืงื•ื•ื™ืจื™ื– ืฆื• ื‘ืึทืงื•ืžืขืŸ ืกืึทืžืคึผืึทืœื–.

ืคึผืึทืžืขืœืขืš ื‘ืขื˜ืŸ

ื“ืขืจ ืงืœื™ืขื ื˜ ืื™ืŸ ืงืฉื™ื ืื™ื– ื˜ืจื™ื™ื ื’ ืฆื• ื˜ืึธืŸ ืขืคึผืขืก ื•ื•ืึธืก ื™ื ื˜ื•ืึทื˜ื™ื•ื•ืœื™ ื–ืึธืœ ืึทืจื‘ืขื˜ืŸ ื’ืขืฉื•ื•ื™ื ื“:

ื•ื•ื™ื™ึทื–ืŸ ืึทืœืข ืกืขืกื™ืข ืจืขืงืึธืจื“ืก ืคึฟืึทืจ ื™ื•ื–ืขืจื– ื•ื•ืึธืก ื”ืึธื‘ืŸ ื‘ืื–ื•ื›ื˜ ืงื™ื™ืŸ ื‘ืœืึทื˜ ืžื™ื˜ ืึท 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 ืžื™ื– ื“ื•ืจื›ืคื™ืจื•ื ื’ ืฆื™ื™ื˜: 1431924.650 ืžื™ื–

ื“ื™ ืึธื ืคึฟืจืขื’ ืงืจืึธืœื“ 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 ื”ื•ื™ืคึผื˜ ื’ืขื“ืื ืงืขืŸ:

  • ื ื™ืฆืŸ EXISTS ืคึฟืึทืจ ืกื•ื‘ืงื•ื•ืขืจื™ URL: ืžื™ืจ ื’ืขื•ื•ืืœื˜ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื•ื•ื™ื“ืขืจ ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ ืžื™ื˜ ื“ื™ ืกืึทื‘ืงื•ื•ืขืจื™ ืคึฟืึทืจ ื“ื™ 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-ืึทืžื™ ืื•ืŸ ื“ื™ ืกื•ื‘ืงื•ื•ืขืจื™ ื–ื™ืš ื–ืขื ืขืŸ ืฉื ืขืœ ื™ื ื“ื™ื•ื•ื™ื“ื–ืฉื•ืึทืœื™, ืึธื‘ืขืจ ื–ืขื ืขืŸ ื˜ืขืจืึทื‘ืœื™ ืคึผืึทืžืขืœืขืš ืฆื•ื–ืึทืžืขืŸ?

  • ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืกืึทื‘ืงื•ื•ืขืจื™ ืฆื• ื“ื™ 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[]   )

ื•ื•ืึธืก ืžื™ื˜ืœ ืžื™ืจ ื˜ืึธืŸ ืึท ืžื•ืกื˜ืขืจ ื–ื•ื›ืŸ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ URL ืก, ืื•ืŸ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื™ื ื˜ืขืจืกืขืงืฉืึทืŸ ืžื™ื˜ ืึทืœืข 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 ืจืขืงืึธืจื“ืก ื’ืœื™ื™ึทืš, ื•ื•ื™ื™ึทืœ ื“ืึธืก ื–ืขื ืขืŸ ื‘ืœื•ื™ื– IDs ื•ื•ืึธืก ืจื™ืคืขืจื™ื ื’ ืฆื• 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 ืกื™ื ื˜ืึทืงืก ืื™ืš ื ืึธืจ ื’ืขื•ื•ื™ื™ื ื˜ ืึท ืกื•ื‘ืงื•ื•ืขืจื™ ืื•ืŸ ื™ืงืกืคึผืึทื ื“ื™ื“ 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(*) ืื•ื™ืฃ ื‘ื™ื™ื“ืข ืคึผืึทืžืขืœืขืš ืื•ืŸ ืฉื ืขืœ ืงื•ื•ื™ืจื™ื– ืคึฟืึทืจ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื“ืึทื˜ืŸ ืฉื˜ืขืœื˜. ื“ืขืจื ืึธืš, ืคึฟืึทืจ ืึท ืงืœื™ื™ืŸ ืกืึทื‘ืกืขื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ, ืื™ืš ืžืึทื ื™ื•ืึทืœื™ ื•ื•ืขืจืึทืคื™ื™ื“ ืึทื– ืึทืœืข ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืขื ืขืŸ ืจื™ื›ื˜ื™ืง.

ืึทืœืข ื˜ืขืกืฅ ื”ืึธื‘ืŸ ืงืึทื ืกื™ืกื˜ืึทื ื˜ืœื™ positive ืจืขื–ื•ืœื˜ืึทื˜ืŸ. ืžื™ืจ ืคืึทืจืคืขืกื˜ื™ืงื˜ ืึทืœืฅ!

ืœืขืงืฆื™ืขืก ื’ืขืœืขืจื ื˜

ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืœืขืงืฆื™ืขืก ืฆื• ืœืขืจื ืขืŸ ืคื•ืŸ ื“ืขื ื’ืขืฉื™ื›ื˜ืข:

  1. ืึธื ืคึฟืจืขื’ ืคึผืœืึทื ื– ื˜ืึธืŸ ื ื™ื˜ ื–ืึธื’ืŸ ื“ื™ ื’ืื ืฆืข ื’ืขืฉื™ื›ื˜ืข, ืึธื‘ืขืจ ื–ื™ื™ ืงืขื ืขืŸ ืฆื•ืฉื˜ืขืœืŸ ืงืœื•ื–
  2. ื“ื™ ื”ื•ื™ืคึผื˜ ืกืึทืกืคึผืขืงืฅ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืฉื˜ืขื ื“ื™ืง ื“ื™ ืคืึทืงื˜ื™ืฉ ืงื•ืœืคึผืจื™ืฅ
  3. ืคึผืึทืžืขืœืขืš ืคึฟืจืื’ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฆืขื‘ืจืื›ืŸ ืึทืจืึธืคึผ ืฆื• ื™ื–ืึธืœื™ืจืŸ ื‘ืึทื˜ืึทืœื ืขืงืก
  4. ื ื™ื˜ ืึทืœืข ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก ื–ืขื ืขืŸ ืจืขื“ื•ืงื˜ื™ื•ื•ืข ืื™ืŸ ื ืึทื˜ื•ืจ
  5. ื ื•ืฆืŸ EXIST, ื•ื•ื• ืžืขื’ืœืขืš, ืงืขื ืขืŸ ืคื™ืจืŸ ืฆื• ื“ืจืึทืžืึทื˜ื™ืง ื™ื ืงืจื™ืกืึทื– ืื™ืŸ ืคึผืจืึธื•ื“ืึทืงื˜ื™ื•ื•ืึทื˜ื™

ืจืขื–ื•ืœื˜ืึทื˜

ืžื™ืจ ื–ืขื ืขืŸ ืคึฟื•ืŸ ืึท ืึธื ืคึฟืจืขื’ ืฆื™ื™ื˜ ืคื•ืŸ ~ 24 ืžื™ื ื•ื˜ ืฆื• 2 ืกืขืงื•ื ื“ืขืก - ื’ืึทื ืฅ ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคืึทืจื’ืจืขืกืขืจืŸ! ื›ืึธื˜ืฉ ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืจื•ื™ืก, ืึทืœืข ื“ื™ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื™ืŸ ืื™ื™ืŸ ื˜ืึธื’, ืื•ืŸ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืขืกื˜ื™ืžืึทื˜ืขื“ ืึทื– ื–ื™ื™ ื’ืขื ื•ืžืขืŸ ืฆื•ื•ื™ืฉืŸ 1,5 ืื•ืŸ 2 ืฉืขื” ืคึฟืึทืจ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก ืื•ืŸ ื˜ืขืกื˜ื™ื ื’.

SQL ืื™ื– ืึท ื•ื•ื•ื ื“ืขืจืœืขืš ืฉืคึผืจืึทืš ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื“ืขืจืฉืจืึธืงืŸ ืคื•ืŸ ืขืก, ืึธื‘ืขืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืœืขืจื ืขืŸ ืื•ืŸ ื ื•ืฆืŸ ืขืก. ืžื™ื˜ ืึท ื’ื•ื˜ืŸ ืคืืจืฉื˜ืื ื“ ืคื•ืŸ ื•ื•ื™ SQL ืงื•ื•ื™ืจื™ื– ื–ืขื ืขืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“, ื•ื•ื™ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื“ื–ืฉืขื ืขืจื™ื™ืฅ ืึธื ืคึฟืจืขื’ ืคึผืœืึทื ื–, ื•ื•ื™ ื™ื ื“ืขืงืกื™ื– ืึทืจื‘ืขื˜, ืื•ืŸ ืคืฉื•ื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ืื™ืจ ื”ืึทื ื“ืœืขืŸ ืžื™ื˜, ืื™ืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ื’ืขืจืึธื˜ืŸ ืื™ืŸ ืึธืคึผื˜ื™ืžื™ื–ื™ื ื’ ืงื•ื•ื™ืจื™ื–. ืขืก ืื™ื– ื’ืœื™ื™ึทืš ื•ื•ื™ื›ื˜ื™ืง, ืึธื‘ืขืจ, ืฆื• ืคืึธืจื–ืขืฆืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืคืึทืจืฉื™ื“ืขื ืข ืึทืคึผืจืึธื•ื˜ืฉื™ื– ืื•ืŸ ืกืœืึธื•ืœื™ ื‘ืจืขื›ืŸ ืึทืจืึธืคึผ ื“ื™ ืคึผืจืึธื‘ืœืขื, ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื‘ืึทื˜ืึทืœื ืขืงืก.

ื“ืขืจ ื‘ืขืกื˜ืขืจ ื˜ื™ื™ืœ ื•ื•ืขื’ืŸ ื“ืขืจื’ืจื™ื™ื›ืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื•ื•ื™ ื“ื™ ืื™ื– ื“ื™ ื‘ืืžืขืจืงื˜, ืงืขื ื˜ื™ืง ื’ื™ื›ืงื™ื™ึทื˜ ืคึฟืึทืจื‘ืขืกืขืจื•ื ื’ - ื•ื•ื• ืึท ื‘ืึทืจื™ื›ื˜ ื•ื•ืึธืก ื‘ื™ื– ืึทื”ืขืจ ื•ื•ืึธืœื˜ ื ื™ืฉื˜ ืืคื™ืœื• ืœืึธื“ืŸ ืื™ืฆื˜ ืœืึธื•ื“ื– ื›ึผืžืขื˜ ื˜ื™ื™ืงืขืฃ.

ืกืคึผืขืฆื™ืขืœืข ื“ืึทื ืง ืฆื• ืžื™ื™ื ืข ื—ื‘ืจื™ื ื‘ึฐึผืคึดืงึฐื“ึทืช ืึฒื“ึดื™ืชึธื ืžึดืฉึธึผืืจึธืAditya Gauru ะธ ื•ื•ืึทืจื•ืŸ ืžืึทืœื”ืึธื˜ืจืึท ืคึฟืึทืจ ื‘ืจื™ื™ื ืกื˜ืึธืจืžื™ื ื’ ืื•ืŸ ื“ื™ื ืงืึทืจ ืคึผืึทื ื“ื™ืจ ืคึฟืึทืจ ื“ืขืจื’ื™ื™ื•ื ื’ ืึท ื•ื•ื™ื›ื˜ื™ืง ื˜ืขื•ืช ืื™ืŸ ืื•ื ื“ื–ืขืจ ืœืขืฆื˜ ื‘ืขื˜ืŸ ืื™ื™ื“ืขืจ ืžื™ืจ ืœืขืกืึธืฃ ื’ืขื–ืื’ื˜ ื–ื™ื™ึท ื’ืขื–ื•ื ื˜ ืฆื• ืื™ื!

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’