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 (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
随机推荐
- 树 List Leaves 【用数组模拟了树状结构建树+搜索叶子节点+按照特殊规律输出每个叶子节点】
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...
- 吴恩达深度学习笔记(十二)—— Batch Normalization
主要内容: 一.Normalizing activations in a network 二.Fitting Batch Norm in a neural network 三.Why does ...
- mysql-用命令导出、导入表结构或数据
1. 导出整个数据库(表结构和数据) mysqldump -u用户名 -p 数据库名 > 导出的文件名 [root@localhost work]# mysqldump -uroot -p m ...
- Optional int parameter 'time' is present but cannot be translated into a null value due to being decla
今天在操作redis的时候报了这个错:Optional int parameter 'time' is present but cannot be translated into a null val ...
- jQuery 获取jsp页面中用iframe引入的jsp页面中的值
<iframe scrolling="no" src="<c:url value='/unitBaseperson/view.do?para=9&op ...
- JavaScript -- 练习 window 流氓广告
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 04-dotnetCore博客后台基本功能实现
今天继续上篇博客的内容,在上一篇的时候,已经基本实现了博客列表内容的显示,继续进行添加.编辑.删除等功能.添加和编辑界面共用一个界面,添加界面如图所示: 同样我这里使用的还是layui里面的表单内容, ...
- Mac的搜狗输入法和QQ输入法加入⌘⌥⌃⇧自定义短语
搜狗输入法(Mac):http://pinyin.sogou.com/mac/ 创建名为『搜狗输入法自定义短语.ini』的文本文件(建议用Sublime Text),内容如下,然后偏好设置的自定义短语 ...
- Webstorm2016使用技巧——SVN插件使用(svnToolBox)
1. 安装SVN 我这里使用的是TortoiseSVN-1.9.4.27285-x64-svn-1.9.4,安装过程需要注意的是,默认安装没有选择”command line client tools” ...
- eclipse部署和启动guns
eclipse部署guns: 1.import -> 搜索maven -> Existing Maven Projects -> 选择guns根目录 2.修改配置文件: spring ...