2.执行计划(explain)分析
1.使用场景
获取执行计划命令:在select 命令前加上explain 或 desc
explain select 或
desc select
1.语句执行之前 :防患于未然
2.出现慢语句时 :亡羊补牢
2. 执行计划查看

3.重点关注指标说明
table : 发生在那张表的执行计划
type : 查询的类型
全表扫描 : ALL
索引扫描 :idnex,range,ref,eq_ref,connst(system),NULL *****
possible_keys: 可能用到的索引
key : 此次查询走的索引名
key_len : 索引覆盖长度,评估联合索引应用长度。 *****
rows : 扫描了表中的多少行
Extra : 额外的一些信息 ****
4. type
2.4 type
(1) ALL : 全表扫描
mysql> desc select * from city;
mysql> desc select * from city where 1=1 ;
mysql> desc select * from city where population=42;
mysql> desc select * from city where countrycode !='CHN';
mysql> desc select * from city where countrycode not in ('CHN','USA');
mysql> desc select * from city where countrycode like '%CH%';
(2) index : 全索引扫描
mysql> desc select countrycode from city;
(3) range : 索引范围扫描(最常见)
> < >= <= like
in or
mysql> desc select * from city where id<10;
mysql> desc select * from city where countrycode like 'CH%';
mysql> desc select * from city where countrycode in ('CHN','USA');
改写:
desc
select * from city where countrycode='CHN'
union all
select * from city where countrycode='USA'
(4) ref 辅助索引等值查询
desc
select * from city where countrycode='CHN';
(5) eq_ref 多表关联查询中,非驱动表的连接条件是主键或唯一键
desc
select
city.name,
country.name ,
city.population
from city
join country
on city.countrycode=country.code
where city.population<100;
(6) connst(system) :主键或者唯一键等值查询
mysql> desc select * from city where id=10;
(7) NULL 索引中获取不到数据
mysql> desc select * from city where id=100000;
- 在实际生产中我们尽量避免,全表扫描,全索引扫描,以及索引范围扫描,以提高查询效率,和减少资源使用。
- 我们在多表关联查询当中,最好保证非驱动表为主键或者是唯一键,最不济为普通主键,以高效率
5.key_len 详细说明
1. 作用:判断联合索引覆盖长度
2.最大长度的计算方法
idx(a,b,c) ========> a(10)+b(20)+c(30)
(1). 影响计算的条件
字符集: utf8mb4
数字类型
tinyint 1 Bytes
int 4 Bytes
bigint 8 Bytes
字符串类型
char(5) 20 Bytes
varchar(5) 20 Bytes + 2Bytes (字符串长度)
没有not null : 会多出来一个字节存储是否为空
字符集
测试表:
create table keyt (
id int not null primary key auto_increment,
num int not null,
num1 int ,
k1 char(10) not null ,
k2 char(10) ,
k3 varchar(10) not null ,
k4 varchar(10)
)charset=utf8mb4;
num : 4
num1: 5
k1 : 40
k2 : 41
k3 : 42
k4 : 43
2.5.3 联合索引应用"道道" *****
-- 建立联合索引时,最左侧列,选择重复值最少的列.
alter table keyt add index idx(a,b,c);
-- 例子:
-- 哪些情况可以完美应用以上索引.
desc select *from student where xname='张三' and xage=11 and xgender='m';
desc select *from student where xage=11 and xgender='m' and xname='张三' ;
desc select *from student where xgender='m' and xname='张三' and xage=11 ;
-- 影响到联合索引应用长度的.
-- 缺失 联合索引最左列,不走任何索引
mysql> desc select *from student where xage=11 and xgender='m' ;
-- 缺失中间部分,只能走丢失部分之前的索引部分
mysql> desc select *from student where xname ='张三' and xgender='m' ;
-- 查询条件中,出现不等值查询(> ,< ...like )
mysql> desc select *from student where xname ='张三' xage<18 and xgender='m' ;
联合索引应用长度到不等值列截断了.
-- 多子句
按照 select 子句顺序创建联合索引.
2.执行计划(explain)分析的更多相关文章
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
- 【MS SQL】通过执行计划来分析SQL性能
原文:[MS SQL]通过执行计划来分析SQL性能 如何知道一句SQL语句的执行效率呢,只知道下面3种: 1.通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO O ...
- ORACLE执行计划 explain说明
ORACLE SQL优化工具系列之--EXPLAIN PLAN 对于oracle数据库来说,sql语句的优化可能是对性能提升最为明显的,当然对于DBA来说,也是挑战性比较大的.为了优化一个复杂的SQL ...
- 【mysql】mysql 调优之 ——执行计划 explain
1.what is explain(explain 是个什么东东) explain(解释),在 Mysql 中 作为一个关键词,用来解释 Mysql 是如何执行语句,可以连接 select .dele ...
- Oracle执行计划 explain plan
Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...
- Mysql查看执行计划-explain
最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句> 例如: e ...
- MySQL执行计划explain的key_len解析
前言:当用Explain查看SQL的执行计划时,里面有列显示了 key_len 的值,根据这个值可以判断索引的长度,在组合索引里面可以更清楚的了解到了哪部分字段使用到了索引.下面演示中,表结构的合理性 ...
- mysql 数据库优化之执行计划(explain)简析
数据库优化是一个比较宽泛的概念,涵盖范围较广.大的层面涉及分布式主从.分库.分表等:小的层面包括连接池使用.复杂查询与简单查询的选择及是否在应用中做数据整合等:具体到sql语句执行效率则需调整相应查询 ...
- 0912MySQL 执行计划explain详解
转自http://blog.itpub.net/29773961/viewspace-1767044/ 该博客内容是比较全的,虽然写的比较晦涩,多读几遍还是不错的 explain命令是查看查询优化器如 ...
随机推荐
- python主要探索函数
在数据分析中,Python的主要探索函数 Python中主要用于书探索的是pandas(数据分析)和matplotlib(数据可视化).其中pandas提供了大量的数据探索的工具与数据相关的函数,这些 ...
- Loadrunner test web service which need username and password
Action(){ char * position; char * str; int offset; char * search_str = "ERROR"; // web_s ...
- activiti7组任务测试
package com.zcc.activiti05; import org.activiti.engine.*;import org.activiti.engine.repository.Deplo ...
- Django框架(二十四)—— Django rest_framework-视图组件
目录 视图组件 一.基本视图 二.自定义的封装视图 三.利用mixin类和generice类编写视图 1.使用 2.源码 四.利用generics 下的ListCreateAPIView,Retrie ...
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- C/C++程序员 面试经历总结
最近在找工作,遇到了一些面试题,很惭愧的是很多都没答上来. 现在把一些问题总结一下,算是记录一下面试的经历吧.以后有空简单地回答一下, 同时也欢迎各位同仁解答,共同学习一下吧! 一.嵌入式C语言面 ...
- linux python3换pip 源
linux下python3 pip 安装模块 # python3 -m pip install pymysql 1)检查pip.conf文件是否存在 >> cd ~ > ...
- Linux下如何查看系统是多少位的
在Linux命令行下输入 getconf LONG_BIT 命令
- Nodejs base64编码与解码
1、普通字符串 //编码 new Buffer(String).toString('base64'); //解码 new Buffer(base64Str, 'base64').toString(); ...
- 游戏game
1.log4cxx 日志 2.protobuf 数据交互(类似json 3.boost.asio 网络库 4.boost.python 脚本支持 5.语法树 + c++处理excel资源