In plaats van de Order By
in de hoofdquery, wikkel het als volgt:
SELECT * FROM (
... your query
) ORDER BY `created at`
Bekijk het zoekplan. U zult zien dat in uw geval de sortering wordt uitgevoerd op uw tabel mtrt_items
voordat de outer join wordt uitgevoerd. In de herschrijving die ik gedeeltelijk heb verstrekt, wordt de sortering toegepast na de outer joins en op een veel kleinere set.
UPDATE
Ervan uitgaande dat de LIMIT wordt toegepast op een grote set (500.000?), lijkt het erop dat u de top kunt uitvoeren voordat u een van de joins uitvoert.
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