四、MySQL优化之explain执行计划的extra属性
explain之extra
包含不适合在其他列中显示但十分重要的额外信息
using filesort:文件排序
表明MySQL会对数据使用一个外部的索引排序,
而不是按照表内的索引顺序读取,
mysql无法利用索引完成的排序操作称之为文件排序
常见于order by 排序
mysql> explain select * from tbl_person where age=23 order by address\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: tbl_persontype: ref
possible_keys: idx_age_name_addresskey: idx_age_name_addresskey_len: 4ref: constrows: 3Extra: Using where; Using index; Using filesort
排序时出现了useing filesort文件排序,对查询性能影响很大,需要优化
order by 排序尽量使用索引或者按复合索引的顺序使用排序字段
如:复合索引是c1_c2_c3,所以使用where c1='a' order by c2,c3这样就可以解决出现文件排序的问题
where c1='a' and c2='b' order by c3 这样的方式也可以
因为中间缺失了name所以,按age,name address顺序加上name索引即可
explain select * from tbl_person where age=23 order by name, address;
explain select * from tbl_person where age=23 and name='aa' order by address;
using temporary:临时表排序
使用了临时表保存中间结果, MySQL在对查询结果排序时使用临时表。 常见于order by 和group by
mysql> explain select * from tbl_person where age=23 GROUP BY address\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: tbl_persontype: ref
possible_keys: idx_age_name_addresskey: idx_age_name_addresskey_len: 4ref: constrows: 3Extra: Using where; Using index; Using temporary; Using filesort
出现using temporary临时表排序,必须优化
group by 一定尽量的按索引的个数顺序来,不然特别容易产生文件内排序临时表的创建很消耗系统性能的
因为中间缺失了name所以,按age,name address顺序加上name索引即可
explain select * from tbl_person where age=23 group by name, address;
explain select * from tbl_person where age=23 and name='aa' group by address;
using index :查询索引文件
表示相应的select操作使用了覆盖索引(covering index), 避免访问了表的数据行,效率不错
如果同时出现useing where,表明索引被用来执行索引键值查找
如果没有同时出现using where,表示索引用来读取数据而非执行查找动作(条件)
这个状态无需优化
mysql> explain select * from tbl_person where age=23 order by name\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: tbl_persontype: ref
possible_keys: idx_age_name_addresskey: idx_age_name_addresskey_len: 4ref: constrows: 3Extra: Using where; Using index
这里使用age和name索引,name用作排序了
其他属性
using where
:索引用作查询条件
using join buffer:
使用连接缓存,join使用的多了,会出现缓存
inpossible where:
where 字句的值总是false,不能获取任何数据
explain select age from tbl_person where name ='aa' and name='bb';
select table optimized away
:在没有group by子句的情况下,基于索引优化min/max操作或者对于MyISAM存储引擎优化count(*)操作,不必等到执行阶段再进行计算,查询执行计划生成阶段即完成优化
distinct:
优化distinct操作,在找到第一匹配的元组后即停止找同样的动作
SQL语句的explain重点分析的属性
- type:访问类型,查看SQL的数据访问类型,最好优化到ref和range级别
- key:实际用到的索引,判断是否使用到索引
- key_len:索引长度,可以根据长度判断组合索引中哪些索引失效,与key配合使用
- rows:最大扫描行数,
- extra:重要的额外信息,重点优化useing filesort和useing temporary两个现象
覆盖索引
(covering index)为索引覆盖,查询列要被所建的索引覆盖
如果使用覆盖索引,一定要注意select列表中只取出需要的列,不可用select*
如果所有字段一起作索引会导致索引文件过大,查询性能下降
只要查询列表中是索引字段(主键,索引列,单个或者多个
)即可
mysql> explain select age,name,address from tbl_person\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: tbl_persontype: index
possible_keys: NULLkey: idx_age_name_addresskey_len: 338ref: NULLrows: 9Extra: Using index
该select列表中都是索引字段,使用了覆盖索引,不会扫描全表,所以尽量避免使用select*
使用到的数据库表
CREATE TABLE `tbl_person` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`address` varchar(100) NOT NULL DEFAULT '' COMMENT '地址',`age` int(4) NOT NULL DEFAULT '0' COMMENT '年龄',`name` varchar(10) NOT NULL DEFAULT '' COMMENT '名称',PRIMARY KEY (`id`),KEY `idx_age_name_address` (`age`,`name`,`address`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
四、MySQL优化之explain执行计划的extra属性相关推荐
- mysql执行计划extra_四、MySQL优化之explain执行计划的extra属性
explain之extra 包含不适合在其他列中显示但十分重要的额外信息 using filesort:文件排序 表明MySQL会对数据使用一个外部的索引排序, 而不是按照表内的索引顺序读取, mys ...
- MySQL 优化:Explain 执行计划详解
昨天中午在食堂,和部门的技术大牛们坐在一桌吃饭,作为一个卑微技术渣仔默默的吃着饭,听大佬们高谈阔论,研究各种高端技术,我TM也想说话可实在插不上嘴. 聊着聊着突然说到他上午面试了一个工作6年的程序员, ...
- MySQL — 优化之explain执行计划详解(转)
EXPLAIN简介 EXPLAIN 命令是查看查询优化器如何决定执行查询的主要方法,使用EXPLAIN,只需要在查询中的SELECT关键字之前增加EXPLAIN这个词即可,MYSQL会在查询上设置一个 ...
- MySQL优化篇:执行计划explain中key_len计算方式
概述 key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在使用联合索引的时候,判断该索引有多少部分被使用到非常重要. key_len的长度计算公式很重要(key_len越小, ...
- MySQL高级 之 explain执行计划详解
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...
- MySQL数据库:explain执行计划详解
一.执行计划: 执行计划是SQL语句经过查询分析器后得到的 抽象语法树 和 相关表的统计信息 作出的一个查询方案,这个方案是由查询优化器自动分析产生的.由于是动态数据采样统计分析出来的结果,所以可能会 ...
- 高性能mysql 附录D explain执行计划详解
EXPLAIN: extended关键字:在explain后使用extended关键字,可以显示filtered列和warning信息.在较旧的MySQL版本中,扩展信息是使用EXPLAIN EXTE ...
- mysql 执行计划详解,Mysql中的explain执行计划详解(1)
创建一个表test_explain,并添加入下的数据 mysql> create table test_explain( a int primary key, b int); Query OK ...
- mysql执行计划重用_MySQL 优化之EXPLAN执行计划
MySQL优化之EXPLAN执行计划 ** 备注 ** 本文改编自https://www.processon.com/view/5d4fe8f4e4b04399f5a0303e?fromnew=1#m ...
最新文章
- python学不会的表情包-python这么简单 为何这么多人学不会
- 查看python版本号-怎么查看python版本号
- 多线程_yield()和sleep()方法比较
- 把 textbox 遍历赋值为空
- ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)
- Linux学习笔记(二)|常用命令
- Mysql 中的Text字段的范围
- 推荐算法--其他信息(07)
- 不同类型的变量与零值比较的方法
- Zabbix-1.8.14 安装
- leetcode-longestPalindrome-java
- DuiLib(一)——窗口及消息
- 80端口攻击_使用 ZoomEye 寻找 APT 攻击的蛛丝马迹
- 第10课:JSP指令 Page指令 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- Spring之事务管理与事务的传播特性
- c语言for循环计算100以内奇数的和
- 12v工业计算机主机,ARM一体机 工业电脑,低功耗主机 AM3352
- Aspose.Words doc转pdf 内容出现丢失,页码跳页,排版混乱问题
- 联想E431 win10+Unbutun+Deepin系统安装
- ERP系统对接淘宝电商和线下工作人员的问题与解决方案
热门文章
- 联想服务器控制口登录地址_服务器常见远程管理网口及登录方式
- TurboLaunch启动后无法显示的问题
- Tableau笔记(10)转置和拆分
- java 图片水印_JAVA实现图片水印
- 【计算机网络】已知若干个网络,如何计算汇聚成超网后的地址?
- 【向生活低头】win10电脑使用录音机的注意事项
- 2019.6.1日关于图书馆借来的基本数据分析和挖掘的书
- 前端漂亮的字体 font-family
- txfont与\texttt冲突问题
- 关于Intellij idea里在pom.xml里添加Maven依赖,本地仓库下拉列表显示包很少的血的经验