
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдордиреЗ рд╡рд┐рддрд░рдг рдХреА рдЧрддрд┐ рдореЗрдВ рдордВрджреА рдХреЛ рд╕рд╣рди рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░, рдЕрдкрдиреА рддрд╛рдХрдд рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рддреАрди рдмрд╛рд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ред рд▓реЗрдЦ рдореЗрдВ рдЖрдкрдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реБрдЭрд╛рд╡ рдорд┐рд▓реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рджреЗрдЦреЗрдВрдЧреЗред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдореЗрд░реА рдЯреАрдо рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реА рд╣реИ рдЬреЛ 2GIS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЬрдм рдЖрдк 2gis.ru рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ "рд╕реБрдкрд░рдорд╛рд░реНрдХреЗрдЯ" рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрдЧрдардиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИред рд╣рдорд╛рд░реЗ 2000+ рдЖрд░рдкреАрдПрд╕ рдкрд░, рд▓рдЧрднрдЧ рд╣рд░ рд╕рдорд╕реНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИред
рдЖрд╡реЗрджрди рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг PHP рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ PostgreSQL-9.4 рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ 25,000 рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЖрднрд╛рд╕реА рдорд╢реАрди рдкрд░ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 30 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЕрд╡рдзрд┐ рдиреЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ - рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкреБрд░рд╛рдиреЗ рдврд╛рдБрдЪреЗ рдкрд░ 60 рдорд┐рдирдЯ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рддрдерд╛рдХрдерд┐рдд "рддреНрд╡рд░рд┐рдд" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд┐рдпрд╛
рдпрд╣ рд╕рдм рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рдордиреЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдлреАрдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдЙрд╕реА рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд┐рдПред рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рдЧрдИ, рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рднреАред рдПрдХ рдмрд╛рд░ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдЙрдиреНрд╣реЗрдВ рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд░реЗрдВрдЧрдиреЗ рд▓рдЧреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдзреВрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдПрдХ рдЪреВрдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред
рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЧрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддреЗрдЬ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЧрдпрд╛ред рддреЛ рдПрдХ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ "рдЯреЗрд╕реНрдЯ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░реЗрдВ - рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред"
рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рддреАрди рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ 1: рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реБрдЖ jsQuery
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рднреА рдбреЗрдЯрд╛ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЬрд╝реНрдпрд╛рджрд╛рддрд░ json рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ jsQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛:
SELECT * FROM firm WHERE json_data @@ 'rubrics.@# > 0' AND json_data @@ 'address_name = *' AND json_data @@ 'contact_groups.#.contacts.#.type = тАЬwebsiteтАЭ' ORDER BY RANDOM() LIMIT 1
рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдмрд╛рд░ json_data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рд┐рдЦрдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛:
SELECT * FROM firm WHERE json_data @@ 'rubrics.@# > 0 AND address_name = * AND contact_groups.#.contacts.#.type = тАЬwebsiteтАЭ' ORDER BY RANDOM() LIMIT 1
рдЗрд╕ рддрд░рд╣ рдХреА рдХрдорд┐рдпрд╛рдВ рднреА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХреНрд╡реЗрд░реАрдмрд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡реЗ рд╕реНрд╡рдпрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдХреЛрдб рдореЗрдВ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
$qb = $this>createQueryBulder() ->selectAllBranchFields() ->fromBranchPartition() ->hasRubric() ->hasAddressName() ->hasWebsite() ->orderByRandom() ->setMaxResults(1);
рд╣рдорд╛рд░реА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВ : рдпрджрд┐ рдПрдХ JSONB рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХрдИ рд╢рд░реНрддреЗрдВ рд╣реИрдВ, рддреЛ рдЙрди рд╕рднреА рдХрд╛ рд╡рд░реНрдгрди рдПрдХрд▓ рдСрдкрд░реЗрдЯрд░ '@@' рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХрд░реЗрдВред рд╣рдордиреЗ рд░рд┐рдбреНрдпреВрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рджреЛ рдмрд╛рд░ рддреЗрдЬ рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ, рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд░реЛрдз рдореЗрдВ 7500ms рд▓рдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕рдореЗрдВ 3500ms рд▓рдЧрддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ 2: рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛
рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рд╣реИред рдкрд╣рд▓реЗ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЕрдХреНрд╕рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЧрдПред
рд╣рдордиреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдЧрдорди рд░рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдФрд░ рдЪреВрдВрдХрд┐ рдПрдХ рдирдИ рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рд╕реЗ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╡реЗ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рддрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣реЗ, рдЬрдм рддрдХ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдХрдИ рдЪрд╛рдмрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ - 1000 рдЯреБрдХрдбрд╝реЗред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рд░ рдХреБрдЫ рдорд┐рдирдЯ рдпрд╛ рдорд╛рдВрдЧ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд▓реА рдХреБрдВрдЬреА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдиреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреА, рдЬрд┐рд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдордиреЗ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ - рд╣рдореЗрдВ рдЬрд╡рд╛рдм "504" рдореЗрдВ рдорд┐рд▓рд╛, рдЬреЛ рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛, рдФрд░ рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рдЬрд╛рд░реА рд░рд╣реАред рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдФрд░ рд╣рдорд╛рд░реА рдЪрд╛рдмреА рдмрдЪ рдЧрдИред
рдЬрдм рддрдХ рд╣рдо рд▓реЙрдЧ рдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рд╣рдо рдЕрдЬреНрдЮрд╛рди рдореЗрдВ рд░рд╣рддреЗ рдереЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдордиреЗ рдЪрд╛рдмрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдереАрдВ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЙрдирдореЗрдВ рд╕реЗ 500,000 рдЬрдорд╛ рдХрд┐рдП рд╣реИрдВред
рд╣рдорд╛рд░реА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВ: рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЙрд╕рдХреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ рдЬрд╛рдПред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдВрдЬреА рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ 500 рдЧреБрдирд╛ рддреЗрдЬ рд╣реЛ рдЧрдИред
рд╕рдорд╕реНрдпрд╛ 3: рд░реИрдВрдбрдо рд╕реИрдВрдкрд▓рд┐рдВрдЧ
рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдерд╛ рдЬрдм рд╣рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрд░ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордп рдкрд░ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ред рдЗрд╕реАрд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╣рд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЖрдк ORDER BY RANDOM () рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдЬрдм рд╣рдордиреЗ EXPLAIN рдХреЗ рд╕рд╛рде, рдмрд┐рдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде, рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрд╛, рддреЛ рд╣рдордиреЗ 20 рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рджреЗрдЦреАред рдпрджрд┐ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ 160ms рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЛрд╡реЛрд╕рд┐рдмрд┐рд░реНрд╕реНрдХ рдореЗрдВ рд▓рдЧрднрдЧ 150 рд╣рдЬрд╛рд░ рдХрдВрдкрдирд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдордиреЗ рдПрдХ рдРрд╕реА рдХрдВрдкрдиреА рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкрддрд╛, рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ рдПрдХ рд╢реАрд░реНрд╖рдХ рд╣реИ, рддреЛ рд╣рдордиреЗ рд▓рдЧрднрдЧ рдкреВрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдкрд╣рд▓реЗ 100 рдлрд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рд╣рдорд╛рд░реА рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдФрд░ рдЧрддрд┐ рдХреЗ рдирд┐рд░рдВрддрд░ рдЪрдпрди рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордЭреМрддрд╛ рдерд╛:
SELECT * FROM (SELECT * FROM firm_1 WHERE json_data @@ 'rubrics.@# > 0 AND address_name = * AND contact_groups.#.contacts.#.type = "website"' LIMIT 100) random_hack ORDER BY RANDOM() LIMIT 1;
рдЗрд╕ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдордиреЗ 20x рддреНрд╡рд░рдг рдкрд░ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп 180 рдореА рд╣реИред
рд╣рдорд╛рд░реА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВ: рдпрд╣ рдХреНрд╖рдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╢рд╛рдпрдж рд╣реА рдЧрд▓рддреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рддреЛ рд╣рдореЗрд╢рд╛ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреА рдХрд┐рддрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдФрд░ рдЪрдпрди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рд╣рдореЗрдВ 20 рдмрд╛рд░ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реАред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА:
- рдпрджрд┐ рд╣рдо JSONB рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╢рд░реНрддреЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдСрдкрд░реЗрдЯрд░ '@@' рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдпрджрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
- рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд░рди рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдирдореВрдиреЗ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордЭреМрддрд╛ рдкрд╛рддреЗ рд╣реИрдВред
рд╣рдордиреЗ рд╕рд╛рдзрд╛рд░рдг (рдФрд░ рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рд╕реНрдкрд╖реНрдЯ рднреА) рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреАрди рдмрд╛рд░ рдкреНрд░рддрд┐рдЧрдорди рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ 25K рдкрд░реАрдХреНрд╖рдг 10 рдорд┐рдирдЯ рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдо рдЕрдЧрд▓реЗ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЦреЛрдЬреЛрдВ рдиреЗ рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдЖрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред