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