MySQL JOIN рдкреНрд░рджрд░реНрд╢рди рдХреА рдЦреЛрдЬ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ JOIN рдХреЛ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдИ рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ (рдЬреЛ MySQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХрд┐ рдЬреЛрдЗрди рдмреБрд░рд╛ рд╣реИ, рдЙрд╕реЗ рдбрд░рд╛рдирд╛ рдкрд╕рдВрдж рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЖрдЗрдП рдЗрд╕ рдкреНрд░рд╢реНрди рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ JOIN рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдм рд╕реЛрдЪрдирд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛:

- MySQL рдЯреНрдпреВрдирд┐рдВрдЧ: рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реА рдЬрд╛рддреА рд╣реИрдВ ( innodb_buffer_pool_size = 8 рдПрдордмреА рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рд┐рдд )
- рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг: рд╕реАрдХреНрд╡рд▓ рдкреНрд░реЛ рдХреЗ MySQL рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рд╕рдордп рдХреЛ рдЗрд╕рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдкрд╛ рдЬрд╛рдПрдЧрд╛
- рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬреЗрдВ, рдЬреИрд╕реЗ 3 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдкрд░ рдЬреБрдбрд╝рддреА рд╣реИрдВ: рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдореИрдЪреЛрдВ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВ, рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╣рдо рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ рдмрдЪрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рди рдХрд┐ рджрд╕ рдкреНрд░рддрд┐рд╢рдд

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд▓реЗрдЯреЗрдВ рд╣реЛрдВрдЧреА рдЬреЛ рдЕрдкрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИрдВ ( рдЯреЗрдмрд▓ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдереЗ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рднрд░реЗ рд╣реБрдП рдереЗ ):

рдХреЙрд▓ - 10 рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЗрдВ:
рдЖрдИрдбреАINT рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА AUTO_INCREMENT
user_idINT
рд▓рд╛рдЧрддINT
call_dtDATETIME
tariff_idINT

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ - 100 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ:
рдЖрдИрдбреАINT рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА AUTO_INCREMENT
рдЬрдиреНрдорддрд┐рдерд┐DATE рдХреЛ
рдирд╛рдоVARCHAR (10)
рд▓рд┐рдВрдЧENUM ('M', 'F')


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо, рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА (рдЖрдИрдбреА) рдкрд░ рд╣реИрдВред рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬреЛрдЗрди рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░


рдЕрдиреБрд╕рдВрдзрд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - MyISAM рдФрд░ InnoDB, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ JOIN рдмрдирд╛рддреЗ рд╣реИрдВ - MyISAM, InnoDB рдФрд░ MEMORY

рдкрд╣рд▓рд╛ рдЦреВрди


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

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдРрд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ MyISAM рдФрд░ InnoDB рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЧрддрд┐ рдХреЛ рджреЗрдЦреЗрдВ (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореВрд▓реНрдп рдпрд╛ user_id рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рд╣реИрдВ - рд╣рдо MySQL рдореЗрдВ рдкреВрд░реНрдг рд╕реНрдХреИрди рдЧрддрд┐ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ:

SELECT MAX(cost) FROM calls WHERE user_id = 5000; --  тДЦ1 

рдФрд░ рдРрд╕рд╛ рдирд┐рд╡реЗрджрди:

 SELECT MAX(cost) FROM calls; --  тДЦ2 


рдкрд░рд┐рдгрд╛рдо (5% рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐):
рд╕рдВрдЦреНрдпрд╛InnoDB, рдПрдордПрд╕рдорд╛рдпрд┐рд╕рдо рдПрдордПрд╕
1рел рейремреж862
253901 150

рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ MyISAM рдореЗрдВ рд╕рдордЧреНрд░ рдЪрдпрди, WHERE рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ MyISAM, InnoDB рд╕реЗ 4.5 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдЗрд╕рд▓рд┐рдП рд░рд╛рдп рд╣реИ рдХрд┐ InnoDB рдПрдХ "рдмреНрд░реЗрдХ" рд╣реИ, рдФрд░ рдпрд╣ MySQL рдЦреБрдж (MyISAM рдХреЗ рд╕рд╛рде) рдмрд╣реБрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИред

рдорд┐рдиреА-рдирд┐рд╖реНрдХрд░реНрд╖: рдЬрдм MyISAM рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ InnoDB рд╕реЗ 5 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ

рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ


рдЖрдЗрдП рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдорд╛рдорд▓реЗ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдерд╛ред
рд╣рдо рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ:

 SELECT MAX(calls.cost) FROM calls JOIN users ON calls.user_id = users.id WHERE calls.cost > %d AND users.sex = 'M' 

рд▓рд╛рдЧрдд рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЙрд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддрд┐рд╢рдд рдЪрдпрди рдХреЗ рддрд╣рдд рдЧрд┐рд░ рдЬрд╛рдП

рдпрджрд┐ рд╣рдо рд▓рд╛рдЧрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдорд╛рдВрд╕рдкреЗрд╢рд┐рдпреЛрдВ рдХреЗ рдКрдкрд░ рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ N% рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧреА, рддреЛ MySQL рдХреЗрд╡рд▓ N% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╢реЗрд╖ (100-N)% рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ JOIN рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрддреБрд░ MySQL рд╣реИред

рдЬреЛрдЗрди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВ:

рдкреВрд░реНрдг рд╕реНрдХреИрди + рдЬреЙрдЗрди 0.1% рд▓рд╛рдЗрдиреЗрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ \ CallsInnoDB, рдПрдордПрд╕ (JOIN, рдПрдордПрд╕ рдХреЗрд╡рд▓)MyISAM, рдПрдордПрд╕ (JOIN, рдПрдордПрд╕ рдХреЗрд╡рд▓)
InnoDB5,450 (~ 0)857 (~ 0)
MyISAM5,450 (~ 0)937 (~ 100)
рд╕реНрдореГрддрд┐5 350 (~ 0)845 (~ 100)

рдЕрдм рддрдХ, рд╕рдордп рдкреВрд░реНрдг рд╕реНрдХреИрди рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИред рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рд╕рдм рдХреЗ рдмрд╛рдж, рдЬреЛрдЗрди рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдбрд░рд╛рд╡рдиреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреВрд░реНрдг рд╕реНрдХреИрди + рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ 1% рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ \ CallsInnoDB, рдПрдордПрд╕ (JOIN, рдПрдордПрд╕ рдХреЗрд╡рд▓)MyISAM, рдПрдордПрд╕ (JOIN, рдПрдордПрд╕ рдХреЗрд╡рд▓)
InnoDB5,660 (300)999 (140)
MyISAM6 530 (1 200)1 810 (950)
рд╕реНрдореГрддрд┐5,460 (100)911 (65)

рдордЬреЗрджрд╛рд░ рд╣реБрд╣? рдХреЗрд╡рд▓ 1% рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ MyISAM + MyISAM рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо MyISAM + Inn3DB рд╕реЗ 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдордЬрд╝реЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрдирдУрдмреАрдбреА рдХреЗ рд▓рд┐рдП рдЬреЛрдЗрди, рдЬреЛрдЗрди рд╕реЗ рдордпрд╕рд╛рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред рдФрд░ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ :)!

рдкреВрд░реНрдг рд╕реНрдХреИрди + 10% рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ \ CallsInnoDB, рдПрдордПрд╕рдорд╛рдпрд┐рд╕рдо рдПрдордПрд╕
InnoDB7,230 (1,900)2 190 (990)
MyISAM16 100 (8 800)10,200 (9,000)
рд╕реНрдореГрддрд┐6,080 (700)1,440 (580)

рдпрд╣ рдкрд╛рд╡рд░ (MyISAM) рдХреЗ рд▓рд┐рдП рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ... рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ MyISAM рдЗрддрдирд╛ рд╕реНрдорд╛рд░реНрдЯ рдирд╣реАрдВ рд╣реИ ... рдпрд╛ рдирд╣реАрдВ? рдЖрдЗрдП рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдкреВрд░реНрдг рд╕реНрдХреИрди + рд▓рд╛рдЗрдиреЛрдВ рдХреА 100% рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ \ CallsInnoDB, рдПрдордПрд╕рдорд╛рдпрд┐рд╕рдо рдПрдордПрд╕
InnoDB18,000 (14,650)12,500 (11,655)
MyISAM100,000 (96,650)91 600 (90 750)
рд╕реНрдореГрддрд┐10 500 (7 150)5,280 (4,435)

MyISAM рдХреЗ рд╕рд╛рде JOIN рдХреЗ рд╕рд╛рде рд░рд╛рдХреНрд╖рд╕реА (!) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд▓реЗрдХрд┐рди InnoDB рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ - рдЕрдкрдиреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдХрд╛рд░рдг, JOIN InnoDB рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдЬрдм рдореБрдЭреЗ рдРрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рдХрд┐ рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рддреЗрдЬ JOIN рд╡рд┐рдХрд▓реНрдк рддрдм рд╣реИ рдЬрдм InnoDB MyISAM рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред

рдЦреИрд░, рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдореЗрдорд░реА 525% (4,435 рдПрдордПрд╕) рдХрд╛ рдУрд╡рд░рд╣реЗрдб рджреЗрддреА рд╣реИ, рдкреАрдХреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЗрдиреЛрдмреАрдбреА 1,380% (11,655 рдПрдордПрд╕) рдХрд╛ рдУрд╡рд░рд╣реЗрдб рджреЗрддрд╛ рд╣реИ, рдпрд╣ MyISAM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред

рдЬреЙрдп рдХреА рдЬрдЧрд╣ IN (...) рдХреЗ рд╕рд╛рде


рдЧрд╣рд░реА рдирдЬрд░ рдпрд╣ рджреЗрдЦ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП (рдЬрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП JOIN рдХрд░рддреЗ рд╣реИрдВ) JOIN рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди IN () рдореЗрдВ рд╕рднреА user_id рдХреА рдПрдХ рд╕рд░рд▓ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде:

 SET group_concat_max_len = 10000000; SELECT GROUP_CONCAT(id) FROM users WHERE sex = 'M'; --    50 ,  -   SELECT MAX(cost) FROM calls WHERE user_id IN(%s); -- %s    


MyISAM рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдХреНрд╡реЗрд░реА 3,730 рдПрдордПрд╕ рдореЗрдВ, рдФрд░ 8,290 рдПрдордПрд╕ рдореЗрдВ рдЗрдиреЛрдмреАрдбреА рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧреАред рдЧрд╣рд░реА рдЖрдВрдЦ рдпрд╣ рджреЗрдЦ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ JOIN to MEMORY рд╕реЗ рддреЗрдЬ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ MySQL (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UNIX рд╕реЙрдХреЗрдЯ) рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рдХрдиреЗрдХреНрд╢рди рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, IMHO, рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ MySQL рд╕рд░реНрд╡рд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЪрд▓рд╛рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдЖрдк рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ: рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреБрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдпреЛрдЬрди MyISAM + InnoDB, рдпрд╛ рдмрд╕ InnoDB + InnoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдЪрд░рдо рдкрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MyISAM + рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред MEMORY + MEMORY рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛;)ред

UPD: рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЙрдо рд╣рдмреНрд░рд╛рдпреБрдЬрд╝рд░ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд╡реЗ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереАрдВ:
- рдЕрдиреБрд░реЛрдз рдХреИрд╢ рдЕрдХреНрд╖рдо рд╣реИ
- рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдкрд░ JOIN рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдХреЙрд▓ рдЯреЗрдмрд▓ рдкрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

Source: https://habr.com/ru/post/In122210/


All Articles