环境: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份