数据库SQL执行计划
能写sql 只是程序员的基本功,能写出性能优异的SQL是优秀程序员的必备技能
什么是Mysql的执行计划
要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。
一条SQL如何执行?大概过程
MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的。
应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的。
逻辑层,主要负责查询处理、事务管理等其他数据库功能处理,以查询为例。
- 首先接受到查询sql之后,数据库会立即分配一个线程对其进行处理;
- 第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划;
- 然后交由计划执行器来执行。
- 计划执行器需要访问更底层的事务管理器,存储管理器来操作数据,他们各自的分工各有不同;
- 最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。
物理层,实际物理磁盘上存储的文件,主要分为数据文件,日志文件
通过上面的描述,生成执行计划是执行一条SQL必不可少的步骤,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方面我们进行查看以及为作为性能分析的依据。
所谓的执行计划,就是mysql如何执行一条Sql语句,包括sql查询的顺序、是否使用索引、以及使用索引信息的等等。
如何分析执行计划,来帮助我们写出更好的Sql
MySQL为我们提供了 explain 关键字来直观的查看一条SQL的执行计划。
//1. 查询table_name
select * from table_name where name="explain";//2. 查看上述语句的执行计划
explain select * from table_name where name="explain";
执行查看上述2语句后,我们可以得出以下执行计划结果
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | table_name | ALL | 1 | Using where |
上面这个执行计划给到的信息是: 这个结果通过一个简单的语句全表扫描,共扫描1行,使用where条件在t_base_user表中筛选出的。
要想看懂执行计划,就要明白每一个参数的含义
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
---|
id
有一组数字组成。表示一个查询中各个子查询的执行顺序;
- id相同执行顺序由上至下。
- id不同,id值越大优先级越高,越先被执行。
- id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。
select_type
每个子查询的查询类型,一些常见的查询类型。
id | select_type | description |
---|---|---|
1 | SIMPLE | 不包含任何子查询或union等查询 |
2 | PRIMARY | 包含子查询最外层查询就显示为 PRIMARY |
3 | SUBQUERY | 在select或 where字句中包含的查询 |
4 | DERIVED | from字句中包含的查询 |
5 | UNION | 出现在union后的查询语句中 |
6 | UNION RESULT | 从UNION中获取结果集,例如上文的第三个例子 |
table
表示该语句查询的表
partitions
表分区、表创建的时候可以指定通过那个列进行表分区。 ex:
create table tmp (id int unsigned not null AUTO_INCREMENT,name varchar(255),PRIMARY KEY (id)
) engine = innodb
partition by key (id) partitions 5;
type
访问类型
ALL
扫描全表数据index
遍历索引range
索引范围查找index_subquery
在子查询中使用 refunique_subquery
在子查询中使用 eq_refref_or_null
对Null进行索引的优化的 reffulltext
使用全文索引ref
使用非唯一索引查找数据eq_ref
在join
查询中使用RIMARY KEY
orUNIQUE NOT NULL
索引关联。const
使用主键或者唯一索引,且匹配的结果只有一条记录。system const
连接类型的特例,查询的表为系统表。
possible_keys
查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了。可能使用的索引,注意不一定会使用。
key
显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。
Tips:
查询中若使用了覆盖索引(覆盖索引:索引的数据覆盖了需要查询的所有数据),则该索引仅出现在key列表中
key_length
索引长度 char()、varchar()索引长度的计算公式:
(Character Set:utf8mb4=4,utf8=3,gbk=2,latin1=1) * 列长度 + 1(允许null) + 2(变长列)
其他类型索引长度的计算公式: ex:
CREATE TABLE `student` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(128) NOT NULL DEFAULT '',`age` int(11),PRIMARY KEY (`id`),UNIQUE KEY `idx` (`name`),KEY `idx_age` (`age`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
name 索引长度为: 编码为utf8mb4,列长为128,不允许为NULL,字段类型为varchar(128)。key_length = 128 * 4 + 0 + 2 = 514;
age 索引长度:int类型占4位,允许null,索引长度为5。
ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows
扫描行数,也就是说,需要扫描多少行,采能获取目标行数,一般情况下会大于返回行数。通常情况下,rows越小,效率越高,也就有大部分SQL优化,都是在减少这个值的大小。
Tips
: 理想情况下扫描的行数与实际返回行数理论上是一致的,但这种情况及其少,如关联查询,扫描的行数就会比返回行数大大增加)
extra
extra
的信息非常丰富,常见的有:
- 1.Using index 使用覆盖索引
- 2.Using where 使用了用where子句来过滤结果集
- 3.Using filesort 使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化。
- 4.Using temporary 使用了临时表
参考blog → 彻底读懂Mysql执行计划
数据库SQL执行计划相关推荐
- 资源放送丨《Oracle数据库SQL执行计划的取得和解析》PPT视频
前段时间,墨天轮邀请Oracle优化方面的资深专家 陈晓辉 老师分享了<Oracle数据库SQL执行计划的取得和解析>,在这里我们共享一下PPT和视频,供大家参考学习. Oracle优化资 ...
- 2场直播丨Oracle数据库SQL执行计划的取得和解析、一次特殊的 Oralce 硬解析性能问题的技术分享...
1. Oracle数据库SQL执行计划的取得和解析- 2021.02.23 2月23日(周二)晚八点直播课,Oracle优化资深专家陈晓辉,以专业ORACLE数据库技术支持工程师的角度讲解SQL文的执 ...
- 一次搞定各种数据库SQL执行计划
作者 | 董旭阳TonyDong 出品 | CSDN 博客 执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数 ...
- 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等.如果 SQL 语句性能 ...
- 今晚直播丨Oracle数据库SQL执行计划的取得和解析
2月23日(周二)晚八点直播课,Oracle优化资深专家陈晓辉,以专业ORACLE数据库技术支持工程师的角度讲解SQL文的执行过程和SQLPLAN的取得及解析方法. 分享大纲 SQL文执行过程. SQ ...
- 周二直播丨Oracle数据库SQL执行计划的取得和解析
2月23日(周二)晚八点直播课,Oracle优化资深专家陈晓辉,以专业ORACLE数据库技术支持工程师的角度讲解SQL文的执行过程和SQLPLAN的取得及解析方法. 分享大纲 SQL文执行过程. SQ ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...
- sql server varchar最大长度_来自灵魂的拷问—知道什么是SQL执行计划吗?
面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧!看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官:. ...
- oracle执行计划走索引类型,SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE :VAR,为什么执行计划不走索引?...
SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE :VAR,为什么执行计划不走索引? 中文社区 (MOSC) 数据库 (MOSC) 6 Replies Last update ...
- 查看SQL执行计划的方法及优劣
作者 | 胡佳伟:云和恩墨技术工程师,有多年数据库优化经验,在一线执行过多个包括通信.保险等行业的优化项目. 在 Oracle 的性能分析中,很多时候需要对 SQL 进行分析,而最重要的就是对执行计划 ...
最新文章
- mac 查看mysql是否安装_[简明核心系列] 三分钟Mac安装MySQL教程
- 像证券交易员一样思考_2.理解绝招
- Unable to Open User Login File
- 13行满分代码:1038 统计同成绩学生 (20分)
- 迁移TFS 2012服务至新的电脑硬件
- Linux C高级编程——网络编程之UDP(4)
- iphone屏蔽系统更新_手贱更新了 iphone系统,想退回到原来的版本,这个方法简单易用...
- asp.net 获取客户端mac_Mac软件安利(人人影视 for Mac 3.1.2)
- [轉]asp解析json
- Java进阶:SpringMVC中使用fileupload报错Error creating bean with name ‘multipartResolver‘
- Hbase教程(一) Hbase入门教程
- 雷达、信号处理方向的理解
- 华为手机怎么隐藏按键图标_华为手机如何隐藏桌面图标
- ubuntu20.4 微信,qq ,等安装安装教程
- Burp Suite代理和火狐浏览器的设置(超详细)
- windows机器硬盘不能超过2T详解及图文破解方法
- 【Day1.4】奢华的海滨酒店,打发半天时间不成问题
- vue 多种方法实现名字拼接
- Android studio如何导入导出手机和模拟器文件
- 怎样查询自己正在上网的路由器的IP地址?网络节点跟踪命令tracert的用法
热门文章
- My BlackBerry
- 【5】线性反馈移位寄存器
- 知识图谱实现公安情报分析(人工智能系列)
- 计算机网络保密管理十个严禁,涉密网络保密管理规定
- Win7 IE8首页强制成http://www.2345.com/?uuc
- flash自适应屏幕 html,让Flash自适应浏览器屏幕大小的几种方法
- win10 联想键盘快捷键关闭_如何关闭联想台式机电脑USB键盘的FN功能
- java ntp授时服务器,时间同步服务器NTP
- 18年韩师插本c语言的题答案,插本全能题库
- java session 过期判断_session过期时间是多少?如何查看session是否过期?