如何确定Mysql中的order by排序语句是否使用了临时文件


环境:mysql5.7

前言

使用order by时,mysql有时候会在内存中排序,有时候会在磁盘的临时文件中排序,下面介绍一下方法步骤

前提条件

先查看执行语句的执行计划,Extra 这个字段中出现“Using filesort"

正文

表定义

CREATE TABLE `table` (
  `id` varchar(48) NOT NULL,
  `c_1` varchar(48) NOT NULL ,
  `c_2` varchar(48) DEFAULT NULL ,
  `c_3` datetime NOT NULL ,
  `c_4` int(2) NOT NULL DEFAULT '0' 
  PRIMARY KEY (`id`),
  KEY `c_2` (`c_2`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

查看步骤


/* 打开optimizer_trace */
SET OPTIMIZER_TRACE='enabled=on'; 

/* 执行语句 */
select c_1, c_2,c_3 from table where c_2 ='abc' order by c_3 limit 500; 

/* 查看 OPTIMIZER_TRACE 输出 */
SELECT * FROM `INFORMATION_SCHEMA`.`OPTIMIZER_TRACE`;


注:分析的select 语句和 SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; 要一起执行,不然会看不到想看的select语句分析结果。
查看OPTIMIZER_TRACE,拉到最下面,会有这样几个字段
在这里插入图片描述
number_of_tmp_files为0时,就说明未使用临时文件,如上图显示就是使用了临时文件,而且是9份


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值