MySQL の最適化 EXPLAIN の Extras で見たくないもの

Extrasで見たくないもの: using filesort (余分なソート)、using temporary (一時ファイルの作成)
Extrasで見たいもの:using index (DB本体を読む必要なし)、Where used (type: ALLとの組み合わせだとindex作成推奨)

Oliver の日記 (4)

(;´д⊂)

CREATE TABLE `topiccheck` (
`topic_id` tinyint(1) unsigned NOT NULL default '0',
`site_id` char(32) binary NOT NULL default '',
`word` varchar(255) NOT NULL default '',
`type` char(20) binary NOT NULL default '',
KEY `topic_site` (`site_id`,`topic_id`),
KEY `type_word` (`type`,`word`)
) TYPE=MyISAM;

SELECT `type`
,`word`
,COUNT( DISTINCT `site_id` ) AS `cnt`
FROM `topiccheck`
GROUP BY `type` , `word`
ORDER BY `cnt` DESC

で、

table type possible_keys key key_len ref rows Extra
topiccheck ALL NULL NULL NULL NULL 35680 Using temporary; Using filesort

なんでやー。type と word 、 site_id にはインデックス付いてるのに……結構遅いし……

SELECT `type` , `word`
FROM `topiccheck`
GROUP BY `type` , `word`

なら using index なのに……

DISTINCT が ORDER BY と組み合わされて用いられると、多くの場合はテンポラリテーブルが必要になります。

MySQL Manual | 5.2.6 MySQL による DISTINCT の最適化

これはこれで正しい動作なのか?