рдЕрдиреБрдХреВрд▓рди рдЖрдЙрдЯрд▓реБрдХ рдСрдлрд╕реЗрдЯ

рдЬрд╣рд╛рдВ рднреА рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдорд┐рдЯ рдСрдлрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдмреНрд░реЗрдХ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВ

SELECT * FROM test_table ORDER BY id LIMIT 100000, 30 

рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 200k рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛рдлреА рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛, рдФрд░ 3-5 рд╕реЗрдХрдВрдб рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрди рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ mysql-slow.log рдореЗрдВ рдЖрдиреЗ рд▓рдЧреЗред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдорд┐рдЯ 100000, 30 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - mysql рдкрд╣рд▓реЗ 100000 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЖрд╡рд╢реНрдпрдХ 30 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдмрд╕ рдлреЙрд░реНрдо рдХреА рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 SELECT * FROM test_table JOIN (SELECT id FROM test_table ORDER BY id LIMIT 100000, 30) as b ON b.id = test_table.id 

рдЖрдЗрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, DLE рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
 SELECT dle_comments.*... FROM dle_comments LEFT JOIN dle_post ON dle_comments.post_id=dle_post.id LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id ORDER BY id desc LIMIT 101000,30 

рд╕рд╣реА рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 SELECT dle_comments.*... FROM dle_comments LEFT JOIN dle_post ON dle_comments.post_id=dle_post.id LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id JOIN (select id FROM dle_comments ORDER BY id desc LIMIT 101000,30 ) as t ON t.id = dle_comments.id 

рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, JOIN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рд╣реА рд╕реНрддрд░ рдкрд░ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда-рджрд░-рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ рдХреЗ wilds рдореЗрдВ рдЪрдврд╝ рдЧрдпрд╛ рд╣реЛред

рдкреБрдирд╢реНрдЪред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреАрдПрд▓рдИ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ (рдЙрд╕реА рддрд░рд╣ рд╕рднреА рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ .class.php рдлрд╝рд╛рдЗрд▓
рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
 $sql_result = $this->db->query( $this->query . " LIMIT " . $this->cstart . "," . $this->comments_per_pages ); 

рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
 if( $_GET['do'] == "lastcomments" ) $sql_result = $this->db->query( str_replace("ORDER BY id desc", "JOIN (select id FROM " . PREFIX . "_comments ORDER BY id desc" . " LIMIT " . $this-else $sql_result = $this->db->query( $this->query . " LIMIT " . $this->cstart . "," . $this->comments_per_pages ); >cstart . "," . $this->comments_per_pages .") as t ON t.id = " . PREFIX . "_comments.id",$this->query) ); 

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


All Articles