mysql优化之(use temporary、use filesort)

22 篇文章 1 订阅

目录

 

一、use temporary

二、use filesort

三、extra的其它字段说明

 

一、use temporary
      为了解决查询,MySQL需要创建一个临时表来容纳结果。

use temporary产生条件:

 如果GROUP BY 的列没有索引,产生临时表.
 如果GROUP BY时,SELECT的列不止GROUP BY列一个,并且GROUP BY的列不是主键 ,产生临时表.
 如果GROUP BY的列有索引,ORDER BY的列没索引.产生临时表.
 如果GROUP BY的列和ORDER BY的列不一样,即使都有索引也会产生临时表.
 如果GROUP BY或ORDER BY的列不是来自JOIN语句第一个表.会产生临时表.
 如果DISTINCT 和 ORDER BY的列没有索引,产生临时表.
    如果group by 的列没有索引,必产生内部临时表,
   如果order by 与group by为不同列时,或多表联查时order by ,group by 包含的列不是第一张表的列,将会产生临时表
 

解决方式:根据如上use temporary产生条件对应的解决,mysql也不会再使用use temporary。

 

二、use filesort
     MySQL需要额外的一次传递,以对查询出的数据进行排序。文件排序(文件可能在磁盘,也可能在内存)。

需要注意的是:由于 Using filesort是使用算法在 内存中进行排序,MySQL对于排序的记录的大小也是有做限制:max_length_for_sort_data,默认为1024
show variables like '%max_length_for_sort_data%';

+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| max_length_for_sort_data | 1024 |
+--------------------------+-------+
经过笔者测试,如果排序查询的数据两大于这个默认值的话,还是会使用Using filesort。

解决方式:当排序查询的数据量在默认值1024的范围内时,在排序的字段上加上索引可以提升MySQL查询的速度,mysql也不会再使用use filesort。

 

三、extra的其它字段说明
useing  index: 是指用到了索引覆盖,效率非常高

using where 是指光靠索引定位不了,还得where判断一下

Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。

Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。

Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。

Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。

Using sort_union(...), Using union(...), Using intersect(...):这些函数说明如何为index_merge联接类型合并索引扫描。

Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。
————————————————
版权声明:本文为CSDN博主「Lei_Da_Gou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Lei_Da_Gou/article/details/89448282

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值