Hallo Joachim,
a ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
b ALL PRIMARY NULL NULL NULL 3 Using where
c ALL NULL NULL NULL NULL 2Sprich fuer a und c hat er keine possible_keys. Aber in diesen Tabellen muessen ja auch Übereinstimmungen gefunden werden, die nicht unique sein können:
a.article_author_id = b.id
^^^^^^^^^^^^^^^^^^^
a.id = c.comment_article_id
^^^^^^^^^^^^^^^^^^^^
diese Spalten solltest Du ebenfalls mit einem Index versehen :-)
Somit sollte der Optimierer in Tabelle a den Index der Spalte article_author_id finden und nutzen.
Welche MySQL-Version verwendest Du?
Schreibe mal die Query um:
SELECT
a.id,
a.article_title,
a.article_text,
a.article_author_id,
a.`date`,
b.email,
b.nick,
COUNT(c.comment_article_id)
FROM table_b b
INNER JOIN table_a a
ON b.id = a.article_author_id
LEFT JOIN c
ON a.id = c.comment_article_id
WHERE a.blog_name = 'blogname'
GROUP BY
a.id,
a.article_title,
a.article_text,
a.article_author_id,
a.`date`,
b.email,
b.nick
ORDER BY a.id DESC
LIMIT 0, 10
Indexe:
a.id PRIMARY KEY
a.article_author_id INDEX (nicht UNIQUE)
b.id PRIMARY KEY
c.comment_article_id INDEX (nicht UNIQUE
Beachte bitte, dass je Tabelle in einer Abfrage nur _ein_ Index genutzt werden kann. using filesort und using temporary ist beides schlecht, zusammen noch ungünstiger. Dort sollte man bei Optimierungen ansetzen.
Freundliche Grüße
Vinzenz