MySQL explain 的Using temporary; Using filesort
2016-08-25 12:00
260 查看
在使用explain优化sql的时候,有Using temporary; Using filesort这两种是需要特别注意的:
Using temporary:在MySQL执行查询的过程中自动产生临时表(Creating tmp table)
Using filesort:是指查询完成之前还需要“额外的一次排序”
MYSQL手册是这么解释的“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。”
下面用例子解释一下:
例子:yearAndQuarter 保存了id(uuid),year,quarter三个字段,year和quarter是正常的一些数据。
1、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016'
<span style="font-size: 14px; line-height: 26px;"><span style="color:#333333;">2、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016' </span><strong><span style="color:#ff0000;">ORDER BY s.year , s.quarter</span></strong><span style="color:#333333;"> </span></span>
原因:产出Using filesort是在加了ORDER
BY 之后,可以解释成第一句是按主键id排序的,第二句在主键id排序后,还有一次根据s.year , s.quarter的排序。
消除:添加s.year , s.quarter的索引,而不是单个的索引,这样查询时order by默认是按照索引的顺序,不需要额外的进行排序。
这里加了group by,出现了Using temporary; Using filesort,在执行过程中会使用临时表,并且没有使用索引排序,如果使用了索引就不会有这两个出现。
这两个还有很多出现的情形,上面列举的只是比较常见的一个情形。
上面的内容是学习过程中出现的问题的收集整理,加上自己理解测试,做一次记录,不排除有些理解错误的地方,以便后续有需要使用。
1、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016'
Using temporary:在MySQL执行查询的过程中自动产生临时表(Creating tmp table)
Using filesort:是指查询完成之前还需要“额外的一次排序”
MYSQL手册是这么解释的“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。”
下面用例子解释一下:
例子:yearAndQuarter 保存了id(uuid),year,quarter三个字段,year和quarter是正常的一些数据。
1、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016'
<span style="font-size: 14px; line-height: 26px;"><span style="color:#333333;">2、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016' </span><strong><span style="color:#ff0000;">ORDER BY s.year , s.quarter</span></strong><span style="color:#333333;"> </span></span>
原因:产出Using filesort是在加了ORDER
BY 之后,可以解释成第一句是按主键id排序的,第二句在主键id排序后,还有一次根据s.year , s.quarter的排序。
消除:添加s.year , s.quarter的索引,而不是单个的索引,这样查询时order by默认是按照索引的顺序,不需要额外的进行排序。
<span style="font-family:Arial;"><span style="font-size: 14px; line-height: 26px;"><span style="color: rgb(51, 51, 51);">3、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016' </span><strong><span style="color: rgb(255, 0, 0);">ORDER BY s.year , s.quarter</span></strong><span style="color: rgb(51, 51, 51);"> </span></span></span>
<span style="font-family: Arial;"><span style="font-size: 14px; line-height: 26px;"></span></span><pre name="code" class="sql"><span style="font-family: Arial;"><span style="font-size: 14px; line-height: 26px;"><span style="color:#333333;">4、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016' </span><strong><span style="color:#ff0000;">GROUP BY s.year,s.quarter</span></strong><span style="color: rgb(51, 51, 51);"> </span></span></span>
这里加了group by,出现了Using temporary; Using filesort,在执行过程中会使用临时表,并且没有使用索引排序,如果使用了索引就不会有这两个出现。
这两个还有很多出现的情形,上面列举的只是比较常见的一个情形。
上面的内容是学习过程中出现的问题的收集整理,加上自己理解测试,做一次记录,不排除有些理解错误的地方,以便后续有需要使用。
1、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016'
<span style="font-family: Arial;"><span style="font-size: 14px; line-height: 26px;"><span style="color: rgb(51, 51, 51);">3、SELECT s.year, s.quarter FROM yearAndQuarter s WHERE s.year = '2016' </span><strong><span style="color: rgb(255, 0, 0);">ORDER BY s.year , s.quarter</span></strong><span style="color: rgb(51, 51, 51);"> </span></span></span>
相关文章推荐
- (转载)EXPLAIN sql优化方法(2) Using temporary ; Using filesort
- EXPLAIN sql优化方法(2) Using temporary ; Using filesort
- using_where, Using temporary ,using_filesort 分享
- using_where, Using temporary ,using_filesort 分享
- Using temporary和Using filesort分析
- EXPLAIN sql优化方法2 Using temporary ; Using filesort
- mysql explain中的using filesort
- MySQL查询用户每天的阅读量以及Using temporary; Using filesort
- mysql查询优化--临时表和文件排序(Using temporary; Using filesort问题解决)
- EXPLAIN sql优化方法(2) Using temporary ; Using filesort
- EXPLAIN sql优化方法(2) Using temporary ; Using filesort
- mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
- EXPLAIN sql优化方法(2) Using temporary ; Using filesort
- 一次mysql 优化 (Using temporary ; Using filesort)
- 执行计划中Using filesort,Using temporary相关语句的优化解决
- mysql优化(四)mysql优化索引--Using filesort
- Mysql之EXPLAIN显示using filesort
- Mysql之EXPLAIN显示using filesort
- mysql order by 出现Using filesort的解决办法
- mysql explain中的using filesort