Mysql查询使用索引使用文件排序使用临时

Posted

技术标签:

【中文标题】Mysql查询使用索引使用文件排序使用临时【英文标题】:Mysql query using index using filesort using temporary 【发布时间】:2014-08-27 13:58:18 【问题描述】:

我的数据库中有以下两个表:

表 1:图片

列:jeid [和其他] 主键:jeid 行数:160 万

表 2:媒体名称

列:jeid、媒体类型、名字、姓氏 主键:jeid、media_type 索引:名字,姓氏 行数:160 万

我正在运行以下查询:

SELECT media.jeid FROM image AS media
LEFT JOIN file_girls_names AS name ON name.jeid = media.jeid AND name.media_type = "image"
ORDER BY name.first_name, name.last_name
LIMIT 0, 50

当我对此查询进行解释时,额外的列告诉我:

使用索引; 使用临时; 使用文件排序

我不确定“使用索引”是否不好,但我很确定“使用临时”和“使用文件排序”是不好的。问题是,我不知道如何解决这些问题。我一直在阅读各种各样的东西,但我似乎无法找到明确的解决方案。谁能给我一些帮助?

谢谢。

【问题讨论】:

【参考方案1】:

编写查询的方法不止一种,您必须进行一些测试,无论如何这是我的尝试。

SELECT `names`.`jeid`
FROM `file_girls_names` AS `names`
INNER JOIN `image` AS `media` ON `names`.`jeid` = `media`.`jeid`
WHERE `names`.`media_type` = 'image'
ORDER BY `names`.`first_name`, `names`.`last_name`
LIMIT 0, 50

注意:: 这假设您在两个表中都有匹配的列(除非您特别想要左连接,那么这应该没问题)。

【讨论】:

以上是关于Mysql查询使用索引使用文件排序使用临时的主要内容,如果未能解决你的问题,请参考以下文章

分组依据/排序依据的 MySQL 索引

通过 Join-Where-Group 通过选择查询避免使用临时的正确索引;使用文件排序

MySQL 查询优化 - 子查询 & 使用 where;使用临时的;使用文件排序

在 MySQL 中进行排序时查询花费了太多时间

使用临时的 MYSQL 优化;使用文件排序!!! -> 帮助

MySQL:为啥简单查询不使用索引,执行文件排序