当前位置:网站首页>Explain详解与实践
Explain详解与实践
2022-08-04 03:53:00 【Laughing_Xie】
Explain是mysql提供的工具,用于分析SQL语句的执行情况
图1.
图2.
show warnings; 查看MySQL内部sql优化的情况
关闭衍生表合并优化,显示更详细的步骤
set session optimizer_switch='derived_merge=off';
涉及三个查询,DERIVED (衍生查询,从user中查), SUBQUERY(子查询,table为 client),这是一个复杂查询 PRIMARY(最外层的,对应的table为 衍生表<derived3> ,derived ,id 为3 )
图3.
select_type:
1.在执行SQL语句过程中,id越大表示执行的优先级越高(也有相同的情况)
DERIVED :一般最先执行,包含在from 之后生成的查询结果集,生成一个临时表。MySQL会将结果存放在一个临时表中,也称为派生表
SIMPLE :查询的语句为简单查询,如图1,没有关联,子查询等情况
PRIMARY :查询包含子查询的时候,对应的是复杂查询中最外层的select 语句
UNION : union之后出现的select语句对应的查询类型、
SUBQUERY :子查询
DEPENDENTSUBQUERY : 取决于外面的查询 目前第一步从user表中查询;
2.然后执行的类型为PRIMARY包含有子查询,从派生表里面查询数据 ;
3.目前表是没有分区的 所以partitions为空
4.type 代表的是当前通过什么样的方式对数据库表进行访问,关联类型或者访问类型(MySQL决定如何查找表中的行,查找数据行记录的大概范围)
一般常用 system >const >eq_ref >ref >range>index>ALL,一般需要保证查询达到range级别,最好达到ref级别,效率逐渐递减。
NULL: MySQL能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如查找min(id),底层B+Three本就是排好序了的,非常容易拿到。单独查找索引即完成了,不需要执行的时候访问表。
system : 该表只有一行,相当于系统表,查询速度很快,读取1次,system是const类型的特例,本身结果集就只有一条,如同查常量一样,直接查出来的。
const : 说明在进行数据查询的时候,命中了primary key或唯一索引,此类数据查询非常快
eq_ref : primary key或者unique key 索引的所有部分被连接使用,最多只会返回一条符合条件的记录。这可能是在const之外最好的连接类型了
ref : 如果命中的索引是二级索引,不是unique key,type是ref,如果是多字段的联合索引,根据最左匹配原则,从联合索引的最左侧开始连续多个列的字段进行等值比较也是ref类型。
ref_or_null : 类似于ref ,区别在于会额外搜索包含NULL值的行
unique_subquery : 在where条件中的关于in的子查询集合
index_subquery : 用于非唯一索引,可以返回重复值
range : 使用了索引进行行数据检索,只对指定范围内的行数据检索。就是针对的一个有索引的字段,在指定的范围中检索数据 如果where 语句中使用 between、and 、< 、> 、<=、 in 等条件都是range
index : 与ALL都是读全表,区别在于index是走二级索引(全索引扫描),而ALL是从硬盘中读取。【如果查找的结果集,即在二级索引有,在主键索引也有,有时候会优化选择走二级索引,因为主键索引整体比二级索引大,优先扫描二级索引,所占磁盘量也小,因为比主键索引小;具体如何选,内部有自己的算法】
以下是全表扫描,如果是index,则是全索引扫描
ALL : 扫描的主键索引,不是从根节点开始走的,而是从最小的值开始,进行遍历全表扫描。进行数据匹配,此时的数据查询性能最差(读取的磁盘数据量比index更大一点)。
5.possible_keys (和key放的都是这张表的索引)
表示哪些索引可以按MySQL的优化器进行选择,也就是索引候选者有哪些。
6. key
7. key_len
sql语句执行过程中,所具体用到的索引的长度(比如联合索引,只用了其中一个,通过key_len也可以区分用到的是哪个索引,如果都用到就是总长度),和实际的字段属性以及是否为null都有关系,长度有不同的计算方式,一般tinyint:1字节,smallint:2字节 ,int:4字节 bigint:8字节 ,date: 3字节 ,timestamp:4字节,datetime:8字节 ,如果字段运行为空,还需要一个字节来记录是否为NULL
8.ref (条件的引用方式)
如果使用字段进行常量等值查询时ref 此处为const ;当查询条件中使用了表达式或者函数ref 为 func ;其他的显示 null;
9.rows
执行查询的时候必须检查的行数,行数越少,效率越高!!
10. filtered
是一个百分比的值,rows*fitered/100 可以估算出将要和explain 中前一个表进行连接的行数(前一个表指explain中的id值比当前表id值小的表)
11.extra
其他列不显示的额外信息在此列进行展示。
Using index :数据库使用了覆盖索引,查询的列被索引覆盖,使用到覆盖索引会比较快
Using where : 查询时未找到可用的索引,进而通过where条件过滤获取所需数据,并不是所有的带where语句的查询都会显示这个。
Using temporary : 查询后结果需要用临时表来存储,一般在排序或者分组查询时用到
Using filesort : 此类型表示无法利用索引完成指定的排序操作,也就是order by的字段实际没有索引,因此此类SQL是需要进行优化的。
边栏推荐
- The video of machine learning to learn [update]
- 2022 Hangzhou Electric Power Multi-School League Game 5 Solution
- Deep learning -- CNN clothing image classification, for example, discussed how to evaluate neural network model
- 6-port full Gigabit Layer 2 network managed industrial Ethernet switch Gigabit 2 optical 4 electrical fiber self-healing ERPS ring network switch
- 2.15 keil使用电脑端时间日期
- XSS相关知识点
- 千兆2光8电管理型工业以太网交换机WEB管理X-Ring一键环网交换机
- 内网服务器访问远程服务器的端口映射
- 全网没有之一的JMeter 接口测试流程详解
- Y86. Chapter iv Prometheus giant monitoring system and the actual combat, Prometheus storage (17)
猜你喜欢
复制带随机指针的链表
2千兆光+6千兆电导轨式网管型工业级以太网交换机支持X-Ring冗余环网一键环网交换机
马尔可夫链
if,case,for,while
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
高效IO模型
Mini program + new retail, play the new way of playing in the industry!
Basic form validation process
基地址:环境变量
Polygon zkEVM network node
随机推荐
用户与用户互发红包/支付宝C2C/B2C现金红包php源码示例/H5方式/兼容苹果/安卓
The Shell function
数据安全峰会2022 | 美创DSM获颁“数据安全产品能力验证计划”评测证书
Embedded database development programming MySQL (full)
劝退背后。
MRS: Introduction to the use of Alluxio
【 observe 】 super fusion: the first mention of "calculate net nine order" evaluation model, build open prosperity of power network
基本表单验证流程
Why use Selenium for automated testing
2.15 keil使用电脑端时间日期
【医保科普】维护医保基金安全,我们可以这样做
Shell 函数
安装postgis时报找不到“POSTGIS_VERSION”这个函数
Brush esp8266-01 s firmware steps
Mini program + new retail, play the new way of playing in the industry!
【MD5】采用MD5+盐的加密方式完成注册用户和登录账号
KingbaseES数据库启动失败,报“内存段超过可用内存”
【翻译】Terraform和Kubernetes的交集
类如何只能静态分配和只能动态分配
PL/SQL Some Advanced Fundamental