sql >> Databasteknik >  >> RDS >> Mysql

Optimera MySql-fråga:För långsam vid beställning

Istället för att placera Order By in i huvudfrågan, slå in den, så här:

SELECT * FROM (   
  ... your query
) ORDER BY `created at`

Ta en titt på frågeplanen. Du kommer att upptäcka att i ditt fall utförs sorteringen på din tabell mtrt_items innan den yttre sammanfogningen utförs. I omskrivningen som jag delvis har tillhandahållit tillämpas sorteringen efter de yttre sammanfogningarna och tillämpas på en mycket mindre uppsättning.

UPPDATERA

Om vi ​​antar att LIMIT tillämpas på en stor uppsättning (500 000?), ser det ut som att du kan utföra toppen innan du gör någon av sammanfogningarna.

SELECT * from (
    SELECT 
    `id`, ... `created_at`, ...
    ORDER BY `i`.`created_at` DESC 
    LIMIT 100 OFFSET 0) as i

    LEFT JOIN `mtrt_users` AS `u` ON i.user_id =u.id

    LEFT JOIN `twt_tweets_content` AS `t` ON t.id =i.id
    LEFT JOIN `twt_users` AS `tu` ON t.user_id = tu.id

    INNER JOIN `mtrt_items_searches` AS `r` ON i.id =r.item_id
    INNER JOIN `mtrt_searches` AS `s` ON s.id =r.search_id
    INNER JOIN `mtrt_searches_groups` AS `sg` ON sg.search_id =s.id
    INNER JOIN `mtrt_search_groups` AS `g` ON sg.group_id =g.id
    INNER JOIN `account_clients` AS `c` ON g.client_id =c.id                

GROUP BY i.id


  1. Problem med att lägga till rader med JDBC och MySQL?

  2. Kontrollera om ipv6 är inom intervallet

  3. Hashing lösenord med krypto fungerar inte på inloggningen det visar felaktigt pass

  4. Hur tvingar man fram skiftlägeskänsliga tabellnamn?