рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рд╕рдореВрд╣

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

рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
CREATE TABLE IF NOT EXISTS shop ( id INT NOT NULL AUTO_INCREMENT, article INT(4) ZEROFILL NOT NULL, dealer VARCHAR(45) NOT NULL, price DECIMAL(8,2) NOT NULL, PRIMARY KEY (id)) ENGINE = InnoDB; 

рд╕рднреА рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╡рд╛рд▓рд╛ рдбреАрд▓рд░ рдвреВрдВрдврд╛ рдЬрд╛рдПред

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрдиреНрдп рд╕рднреА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рдЗрд╕ рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛? рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореИрдВ рдмрд┐рд▓реНрд▓реА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ mysql.com рдкреНрд░рд▓реЗрдЦрди рдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ 3 рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рд╕рдВрдХреЗрдд рджреВрдВрдЧрд╛ред рддрд╛рд▓рд┐рдХрд╛ 100,000 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд░реА рдЧрдИ рд╣реИ
 DELIMITER $$ CREATE PROCEDURE InsertRand() BEGIN DECLARE i INT; SET i = 1; START TRANSACTION; WHILE i <= 100000 DO INSERT INTO shop (article, dealer, price) VALUES (CEIL(RAND() * 9999), CEIL(RAND() * 999), RAND() * 9999); SET i = i + 1; END WHILE; COMMIT; END$$ DELIMITER ; 


рдкрд╣рд▓рд╛ рдЖрдИрдбреАрдПрдХреНрд╕ (рд▓реЗрдЦ) 2,169 рд╕реА:

 SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article); 


рджреВрд╕рд░рд╛ рдЖрдИрдбреАрдПрдХреНрд╕ (рд▓реЗрдЦ, рдореВрд▓реНрдп) 0.203 рд╕реА

 SELECT s1.article, dealer, s1.price FROM shop s1 JOIN ( SELECT article, MAX(price) AS price FROM shop GROUP BY article ) AS s2 ON s1.article = s2.article AND s1.price = s2.price; 


рддреАрд╕рд░рд╛ рдЖрдИрдбреАрдПрдХреНрд╕ (рд▓реЗрдЦ, рдореВрд▓реНрдп) 0.593 рд╕реА

 SELECT s1.article, s1.dealer, s1.price FROM shop s1 LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price WHERE s2.article IS NULL; 


рдЦреИрд░, рдЕрдм рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди:


рдЪреЗрддрд╛рд╡рдиреА! рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рдХрд░реЗрдВ! MySQL рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╕рдореВрд╣реАрдХрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдореВрд╣ рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬреЛ рд╕рдореВрд╣ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЯреНрдпреВрдкрд▓реНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

4. рдЖрдИрдбреАрдПрдХреНрд╕ (рдХреАрдордд) 0.328 рд╕реА

 SELECT article, dealer, price FROM ( SELECT article, dealer, price FROM shop ORDER BY price desc) as t GROUP BY article ORDER BY NULL; 

рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЫрдВрдЯрдиреА рдХреЗ рдереЗ, рдФрд░ рд╕рдореВрд╣ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ ORDER BY NULL рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ рдЫрд╛рдВрдЯрд╛ рди рдЬрд╛рдП, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рдгрд╛рдо рддреБрд▓рдиреАрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
5. рдЖрдИрдбреАрдПрдХреНрд╕ (рд▓реЗрдЦ, рдореВрд▓реНрдп) 0.110 рд╕реА

 SELECT article, dealer, price FROM shop use index (idx) GROUP BY article DESC ORDER BY NULL; 


рдмреЛрдирд╕ рд╕рдорд╛рдзрд╛рди:


рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рдЪ рдбрд┐рдХрд┐рдВрд╕рди рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

6. рдЖрдИрдбреАрдПрдХреНрд╕ (рд▓реЗрдЦ) 0.202 рдПрд╕

 SELECT article, SUBSTRING_INDEX(GROUP_CONCAT(dealer ORDER BY price DESC),',',1) AS dealer, MAX(price) AS price FROM shop GROUP BY article; 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, dm9 рдиреЗ рдПрдХ рдФрд░ 1 рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
 SELECT article, SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer, 0.00+LEFT(MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price FROM shop GROUP BY article; 


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

рдкреБрдирд╢реНрдЪ: рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпрд╛рдБ 4-6 рдкрд╣рд▓реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ 1 рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдХреЛ рджреЗрддреА рд╣реИрдВ, рдкрд╣рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирдЧрдгреНрдп рдереАред

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

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


All Articles