MySQL 中 filesort 优化
  6DOeteBHjp6w 2023年11月02日 86 0



用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,根据mysql官方文档对他的描述:

MySQL must do an extra pass to find out how to retrieve the rows in sorted order. The sort is done by going through all rows according to the join type and storing the sort key and pointer to the row for all rows that match the WHERE clause.

 中文手册上翻译的很别扭:

“Mysql需要额外的一次传递,以找出如何按排序顺序检索行,通过根据联接类型浏览所有行并为所有匹配where子句的行保存排序关键字和行的指针来完成排序,然后关键字被排序,并按排序顺序检索行。”

 Using filesort 是Mysql里一种速度比较慢的外部排序,尽量避免!

当where条件和order by同时出现时,如果where中字段A使用了索引,而order by的字段是B,查看执行计划时,就会出现filesort文件排序。

解决这个问题就是建立一个包含 WHERE 和 ORDER BY 条件的混合索引。

比如:

MySQL 中 filesort 优化_执行计划

建立一个sid和type的联合索引:

MySQL 中 filesort 优化_执行计划_02

MySQL 中 filesort 优化_执行计划_03

再次查看执行计划:

MySQL 中 filesort 优化_sql_04

filesort已经消失了!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  JiJ96DoSHEh4   2023年11月13日   28   0   0 分隔符字段sed
6DOeteBHjp6w
最新推荐 更多