我仍然无法理解如何阅读、理解和优化 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
这个查询的作用是找到一个物种业力最大的照片。你可以看到这个live的结果:
http://www.jungledragon.com/species
我有一个物种表、一个图像表、一个介于两者之间的映射表和一个图像文件表,因为每个图像有多个图像文件(格式)。
解释输出:
对于 specie 表,我在其主要 id 和字段 commonname 上有索引。对于图像表,我在它的 id 和 karma 字段上有索引,还有一些与这个问题无关的索引。
这个查询目前需要 0.8 到 1.1 秒,在我看来这太慢了。我怀疑正确的索引会加速很多倍,但我不知道是哪一个。