рдПрдХ SQL рдЬрд╛рдВрдЪ рдХреА рдХрд╣рд╛рдиреА

рдкрд┐рдЫрд▓реЗ рджрд┐рд╕рдВрдмрд░ рдореЗрдВ рдореБрдЭреЗ VWO рд╕рд╣рд╛рдпрддрд╛ рдЯреАрдо рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИред рдПрдХ рдмрдбрд╝реЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд▓реЛрдбрд┐рдВрдЧ рд╕рдордп рдирд┐рд╖реЗрдзрд╛рддреНрдордХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдореЗрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред

рдкреГрд╖реНрдарднреВрдорд┐

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЖрдкрдХреЛ VWO рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖рд┐рдд рдЕрднрд┐рдпрд╛рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдП/рдмреА рдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВ, рдЖрдЧрдВрддреБрдХреЛрдВ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВ, рдмрд┐рдХреНрд░реА рдлрд╝рдирд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ, рд╣реАрдЯ рдореИрдк рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдЬрд╝рд┐рдЯ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдЪрд▓рд╛рдПрдВред

рд▓реЗрдХрд┐рди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХрд╛рд░реНрдп рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдФрд░ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдордВрдЪ рдХреЗ рдмрд┐рдирд╛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмреЗрдХрд╛рд░ рд╣реЛрдЧреА рдЬреЛ рдЗрд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИред

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда "abc.com" рдкрд░ <рджрд┐рдирд╛рдВрдХ d1> рд╕реЗ <рджрд┐рдирд╛рдВрдХ d2> рддрдХ рдХреЗ рд╕рднреА рдХреНрд▓рд┐рдХ рджрд┐рдЦрд╛рдПрдВ, рдЬреЛ Chrome рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ (рдпреВрд░реЛрдк рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ iPhone рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)

рдмреВрд▓рд┐рдпрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ. рд╡реЗ рдирдореВрдиреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдзреАрдорд╛ рдЕрдиреБрд░реЛрдз

рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдЧреНрд░рд╛рд╣рдХ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗ:

рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рддреНрд░ рд░рд┐рдХреЙрд░реНрдб рджрд┐рдЦрд╛рдПрдВ рдЬреЛ "/jobs" рд╡рд╛рд▓реЗ рдпреВрдЖрд░рдПрд▓ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрда рдкрд░ рдЧрдП рдереЗ

рдЗрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдерд╛ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд╕ рд▓рд╛рдЦ рд╕реЗ рдЕрдзрд┐рдХ рдЕрджреНрд╡рд┐рддреАрдп рдпреВрдЖрд░рдПрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣реЗ рдереЗред рдФрд░ рд╡реЗ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдпреВрдЖрд░рдПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬреЛ рдЙрдирдХреЗ рдмрд┐рдЬрдиреЗрд╕ рдореЙрдбрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛред

рдкреНрд░рд╛рдердорд┐рдХ рдЬрд╛рдВрдЪ

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдиреАрдЪреЗ рдореВрд▓ рдзреАрдореА 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. рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ_рдбреЗрдЯрд╛: рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдпреВрдЖрд░рдПрд▓, рдкреЗрдЬ, рд╡рд┐рдЬрд╝рд┐рдЯ рдХреА рдЕрд╡рдзрд┐
  3. рдпреВрдЖрд░рдПрд▓: рдЕрддреНрдпрдзрд┐рдХ рдмрдбрд╝реЗ URL рдХреА рдирдХрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ account_id. рдЗрд╕ рддрд░рд╣, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рдЦрд╛рддрд╛ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рд╕реБрд░рд╛рдЧ рдХреА рддрд▓рд╛рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ

рдХрд░реАрдм рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЙрдЪрд┐рдд рд╣реИ:

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

рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдпреЗ ILIKE рдЗрди рд╕рднреА рд▓рдВрдмреЗ рдпреВрдЖрд░рдПрд▓ рдкрд░ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1,4 рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ рдЕрджреНрд╡рд┐рддреАрдп рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдпреВрдЖрд░рдПрд▓) рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЕрд╕рд░ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рд╡рд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ!

SELECT id FROM urls WHERE url ILIKE '%enterprise_customer.com/jobs%';
  id
--------
 ...
(198661 rows)

Time: 5231.765 ms

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЦреЛрдЬ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд╡рд▓ 5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рд▓рд╛рдЦреЛрдВ рдЕрджреНрд╡рд┐рддреАрдп рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдПрдХ рдкреИрдЯрд░реНрди рдЦреЛрдЬрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рд╕рдВрджрд┐рдЧреНрдз рдХрдИ рд╣реИрдВ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╣рдо рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдпреВрдЖрд░рдПрд▓ рдХреА рд╕рдмрдХреНрд╡реЗрд░реА рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рддреЛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрд╕ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ 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[]   )

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдпреВрдЖрд░рдПрд▓ рдкрд░ рдПрдХ рдкреИрдЯрд░реНрди рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд╕реНрдЯ рд╡рд╛рд▓реЗ рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдвреВрдВрдврддреЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ "рдпреВрдЖрд░рдПрд▓" рд╕рднреА рдпреВрдЖрд░рдПрд▓ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ "рдпреВрдЖрд░рдПрд▓" рдХреЙрд▓рдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред recording_data.

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдврд╝рддреЗ рд╕рдВрджреЗрд╣ рдХреЗ рд╕рд╛рде &&, рдореИрдВрдиреЗ рдЙрддреНрдкрдиреНрди рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдкреБрд╖реНрдЯрд┐ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ EXPLAIN ANALYZE (рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдпреЛрдЬрдирд╛ рд╕рд╣реЗрдЬреА рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рдирд░реНрд╕ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ)ред

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 рдХреА рд╕рдВрдкреВрд░реНрдг рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЪреМрд░рд╛рд╣реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рд╕реАрдзреЗ рдпреВрдЖрд░рдПрд▓ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреЗрд╡рд▓ рдЖрдИрдбреА рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ 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.

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣реА рд╣реИ && рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджреА рдЧрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдпреВрдЖрд░рдПрд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рддрд┐рд░рдЫрд╛ рдХрд░реЗрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрд╢рди рдХрд┐рд╕реА рд╕рд░рдгреА (рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ) рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╢рд░реНрдд (рдорд┐рд▓рд╛рди) рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖрддрд╛? рд╣рд╛рдБ, 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ