Anstatt den Order By
zu platzieren in die Hauptabfrage, packen Sie es wie folgt ein:
SELECT * FROM (
... your query
) ORDER BY `created at`
Sehen Sie sich den Abfrageplan an. Sie werden feststellen, dass in Ihrem Fall die Sortierung für Ihre Tabelle mtrt_items
durchgeführt wird bevor der äußere Join ausgeführt wird. In der Umschreibung, die ich teilweise bereitgestellt habe, wird die Sortierung nach den äußeren Verknüpfungen angewendet und auf eine viel kleinere Menge angewendet.
AKTUALISIEREN
Unter der Annahme, dass das LIMIT auf eine große Menge (500.000?) angewendet wird, sieht es so aus, als könnten Sie die Spitze ausführen, bevor Sie einen der Joins ausführen.
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