using filesort和using temporary

using filesort

用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,mysql官方文档对他的描述也很奇怪,不好理解
在这里插入图片描述
概念:mysql会对数据使用一种外部索引排序,而不是基于表内部索引顺序来进行读取,mysql无法利用内部索引来完成的排序被我们称为文件排序

注意:Using filesort 是Mysql里一种速度比较慢的外部排序,如果能避免是最好的了,很多时候,我们可以通过优化索引来尽量避免出现Using filesort,从而提高速度。


产生原因
前提:涉及到order by语句且索引使用不当

情况一:原生的数据表,没有新建任何索引,除非是用主键作为排序字段,否则无论你怎么排序都会出现using filesort

情况二:在建立索引的情况下(只考虑符合索引,开发中很少见单值索引),标准情况如下
在这里插入图片描述
①最容易出错的情况就是不符合最佳左前缀匹配,如图
在这里插入图片描述

多列索引,形如 key ('A1','A2','A3' ,'A4')等的,排序的思路一般是,先按照A1来排序,A1相同,然后按照A2排序,
以此类推,这样对于(A1),(A1,A2),(A1,A2,A3)的索引都是有效的,但是对于(A2,A3)这样的索引就无效了

②符合最佳左前缀匹但是筛选字段不匹配索引字段,如图
在这里插入图片描述

using temporary

定义:mysql对数据进行排序时使用了临时表作为辅助工具,用于保存临时结果,来完成排序过程。
情景:涉及到group by且索引使用不当
后果:严重拖慢mysql的查询速度,意味着需要进行sql优化

解决方案:和using filesort情况基本一致,主要都是因为不符合最佳左前缀匹配法,通过创建或修改索引来优化,达到using index级别即可

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值