MySQL执行计划的讲解
最近同事在执行线上执行一条MySQL的查询语句,数据的话在9000条左右,但使用左连接的时候查询速度大概在15秒左右~这速度确实是无法接受的~
经过简单的修改,变为内连接的话,执行速度不到1秒。
下面是两条具体的sql:
左连接的sql如下:
SELECT
count(*)
FROM
investment i
LEFT JOIN payment m ON m.bill_id = i.id;
执行结果如下:
使用内连接的sql如下:
SELECT
count(*)
FROM
investment i
INNER JOIN payment m ON m.bill_id = i.id;
执行结果如下:
正常情况执行时间不应该出现这么大的差距啊~~
这时想起了mysql的执行计划关键字explain,我们分别对这两条sql执行explain语句,我们得到的结果如下:
对于使用左连接的情况如下:
对于使用内连接的情况如下:
通过比较这两个explain的扫描元素字段 rows可以发现,对于investment而言,如果使用左连接扫描的个数为9420,而如果使用内连接的话,扫描表中元素的个数为1,由此可见左连接和内连接
在此查询的时候扫描元素的差距之大~~由于本人能力有限,不是专业的DBA,至于为什么左连接相对于内连接而言,扫描的表中的元素会多出这么多,也是一知半解~~
后面附上MsSQL执行关键字explain的讲解~~
Explain语法
EXPLAIN SELECT ……
变体:
1. EXPLAIN EXTENDED SELECT ……
将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句
2. EXPLAIN PARTITIONS SELECT ……
用于分区表的EXPLAIN
执行计划包含的信息
id
包含一组数字,表示查询中执行select子句或操作表的顺序
id相同,执行顺序由上至下
如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
select_type
type
possible_keys
key
key_len
ref
Extra
MySQL执行计划的局限
最后
本文是我从简朝阳推荐的ppt转换为网页版的,原ppt下载:下载地址
参考链接:http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html
MySQL执行计划的讲解的更多相关文章
- MySQL执行计划解读
Explain语法 EXPLAIN SELECT …… 变体: 1. EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得 ...
- mysql执行计划
烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况, ...
- 如何查看MySQL执行计划
在介绍怎么查看MySQL执行计划前,我们先来看个后面会提到的名词解释: 覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引 ...
- mysql 执行计划的理解
1.执行计划就是在sql语句之前加上explain,使用desc 也可以.2.desc有两个选项extended和partitions,desc extended 将原sql语句进行优化,通过show ...
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
- 查看Mysql执行计划
使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
- MYSQL 执行计划
Explain语法 EXPLAIN SELECT …… 变体: 1. EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得 ...
- MySQL执行计划extra中的using index 和 using where using index 的区别
本文出处:http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
随机推荐
- VMware ESXI 6.5安装教程
设置从IPMI Virtual Disk 3000启动,出现如下界面: 默认选择第一项,回车安装 安装程序正在检测服务器硬件信息,如果不满足系统安装条件会跳出错误提示. 检测完成之后会出现下面界面 回 ...
- 【转】服务器.htaccess 详解以及 .htaccess 参数说明
htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ...
- hdu 5890 Eighty seven 暴力+bitset优化背包
Eighty seven Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) P ...
- nova conductor
nova conductor是一个RPC 服务,所有支持的API都在 nova.conductor.rpcapi.ConductorAPI 它是stateless,可以水平扩展. 优点: 安全: 如果 ...
- MinGW main()
MinGW没有wmain入口函数,为了获取宽字符的参数,可以用系统API函数GetCommandLineW. main.cpp #include <iostream> #include & ...
- 将【恢复和重新安装Windows】的介质指定到硬盘
步骤: 1. 双击Win8.1/Win10安装镜像,将它载入到虚拟光驱(例子被载入到i:盘) 2. 将Win8.1/Win10安装镜像中sources\install.wim文件复制到一个非系统盘里. ...
- Java面试题上
1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- npm被墙解决方法
npm config set proxy http://your-proxy-addrnpm config set strict-ssl falsenpm config set registry &q ...
- cassandra 集群并发测试脚本
prepare: create keyspace ycsb WITH REPLICATION = { }; USE ycsb; CREATE TABLE users ( firstname text, ...
- vue项目组件的全局注册
在vue-cli项目中,我们经常会封装自己的组件,并且要在多个界面中引用它,这个时候就需要全局注册组件. 首先我们会封装自己的组件,比如twoDimensionTable文件夹下的index.vue: ...