MySQLの説明を読み、理解し、最適化する方法を理解するのにまだ問題があります。orderby列にインデックスを作成することは知っていますが、それだけです。したがって、このクエリの調整にご協力いただければ幸いです。
EXPLAIN
SELECT specie.id, specie.commonname, specie.block_description, maximage.title,
maximage.karma, imagefile.file_name, imagefile.width, imagefile.height,
imagefile.transferred
FROM specie
INNER JOIN specie_map ON specie_map.specie_id = specie.id
INNER JOIN (
SELECT *
FROM image
ORDER BY karma DESC
) AS maximage ON specie_map.image_id = maximage.id
INNER JOIN imagefile ON imagefile.image_id = maximage.id
AND imagefile.type = 'small'
GROUP BY specie.commonname
ORDER BY commonname ASC
LIMIT 0 , 24
このクエリが行うことは、種のカルマが最も多い写真を見つけることです。このライブの結果を見ることができます:
http://www.jungledragon.com/species
画像ごとに複数の画像ファイル(フォーマット)があるため、種のテーブル、画像のテーブル、その間のマッピングテーブル、および画像ファイルテーブルがあります。
出力の説明:
種のテーブルについては、プライマリIDとフィールドcommonnameにインデックスがあります。画像テーブルについては、idフィールドとkarmaフィールドにインデックスがあり、他にもこの質問に関係のないものがいくつかあります。
このクエリは現在0.8から1.1秒かかりますが、私の意見では遅すぎます。正しいインデックスがこれを何度もスピードアップするのではないかと疑っていますが、どれがどれかわかりません。