2016-04-13 7 views
0

Ich habe die folgenden MySQL-Tabellen article und category und category_article. Jeder Artikel kann zu mehr als Kategorie gehören und das ist meine SQL Abfrage.Wie verwendet man beide Indizes für ORDER BY und GROUP BY?

SELECT * FROM article a 
LEFT JOIN category_article ca ON a.id=ca.aid 
LEFT JOIN category c ON c.id=ca.cid 
GROUP BY a.id 
ORDER BY a.date DESC 
WHERE c.status='1' 
LIMIT 0,10 

Mit verschiedenen Spalten für GROUP BY und ORDER BY verhindert Indizes verwenden. Also gibt es eine andere Technik, die ich für die Beschleunigung dieser Abfrage verwenden kann.

+2

Wenn jeder Artikel zu mindestens einer Kategorie gehört, könnten Sie statt dessen 'INNER JOIN's machen, das sollte schon schneller sein. – Paul

+0

Warum diese GROUP BY? (Ich sehe keine Aggregatfunktionen.) – jarlh

+0

Warum verbinden Sie Kategorien in dieser Abfrage? –

Antwort

0

Da Sie keine Aggregation durchführen, können Sie die Gruppe wahrscheinlich auslassen und einfach die Ergebnisse nach a.ID, a.date ordnen und die gleichen Ergebnisse erhalten. Dies sollte zu einem schnelleren Abfrageausführungsplan führen.

+0

Ich habe den Limit-Teil vergessen lassen sagen, dass ich die ersten 10 Artikel nach Datum sortiert haben, deshalb verwende ich Gruppe von – user3311313

+0

Versuchen Sie, mysql ' Erklären Sie, um Ihren Abfrageausführungsplan zu bewerten und dann zu optimieren. https://dev.mysql.com/doc/refman/5.5/de/using-explain.html – Chris

+0

Ich kann nicht optimieren, wenn Reihenfolge und Gruppe durch verschiedene Spalten verwenden – user3311313