帮助优化MySQL慢查询

use*_*096 7 mysql query optimization order-by

我正在运行需要一些 mysql 优化的 wordpress,我有一个缓慢的查询,我想摆脱“使用临时;使用文件排序”

询问:

解释 SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts 
内部连接 ​​wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (1,3,4,5) ) 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') 
按 wp_posts.ID 分组 
ORDER BY wp_posts.post_date 
DESC 限制 0, 10;
+----+--------------+------------------------------+------ +---------------------------------+------------------+--- ------+----------------+------+------- ---------------------------+
| 身份证 | 选择类型 | 表| 类型 | 可能的密钥| 关键| 密钥长度 | 参考 | 行 | 额外 |
+----+-------------+------------------------------+------ +---------------------------------+------------------+--- ------+----------------+------+------- ---------------------------+
| 1 | 简单 | wp_posts | 参考 | PRIMARY,type_status_date | type_status_date | 62 | 常量 | 4 | 使用哪里;使用临时;使用文件排序 |
| 1 | 简单 | wp_term_relationships | 参考 | PRIMARY,term_taxonomy_id | 主要 | 8 | wp.​​wp_posts.ID | 1 | 使用哪里;使用索引 |
+----+-------------+------------------------------+------ +---------------------------------+------------------+--- ------+----------------+------+------- ---------------------------+

我已经上传了 2 个测试表的转储文件(4 个类别和 10 个帖子)

http://pastebin.com/6zhVGQH7

http://pastebin.com/vUnkKqtP

我尝试了很多东西,但没有任何效果,尝试添加索引并强制它们,尝试使用子查询等等,从我看到的主要问题是连接线和 post_date 的顺序,mysql 不能使用 type_status_date 索引进行排序,因为日期列不是“最左边的列”,已经有一个未使用的 post_date 索引,即使我重新排序 type_status_date 中的列也无济于事

谢谢

Der*_*ney 2

我想摆脱“使用临时;使用文件排序”

我看到的问题之一是您使用了不同的GROUP BYandORDER BY子句。MySQL如何使用临时表的手册:

如果存在 ORDER BY 子句和不同的 GROUP BY 子句,或者 ORDER BY 或 GROUP BY 包含连接队列中第一个表以外的表中的列,则会创建临时表。

一旦创建临时表,就需要根据您的ORDER BY子句对其进行排序,由“using filesort”指示。

该执行计划至少使用索引来适当限制找到的行数。

我还会查看有关 ORDER BY 优化的文档