MySQL(2) Explain

2023-09-17 16:50:48

1、概念
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈

2、使用
在 select 语句之前增加 explain 关键字 ,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL
在explain 语句后马上执行一条show warnings语句,会展示mysql对上面这条sql优化后的
语句,通过这个我们可以大概了解mysql给我们sql语句做的一些优化,但是不一定能执行

3、explain中列的含义
(1)id
id是select的编号,值越大执行优先级越高,如果相同,则从上往下执行,null最后执行
(2)select_type
simple 简单查询
primary 复杂查询中最外层的select
subquery 包含在select 中的子查询,不在from之后
derived 包含在from后面的子查询,mysql会将结果放在一个临时表(派生表)
(3)table
查询的表名称
(4)partitions
如果查询是基于分区表的话,会展示查询将要访问的分区
(5)type
访问的类型
1、NULL:比如select min(id) from table; 就是null,意思就是在优化阶段已经查询出来结果,不需要去真正执行所以比 select id from table order by id limit 1 快
2、system   是const的一个特例,衍生表中匹配的数据只有一条
3、const   mysql会将查询的条件优化为一个常量,用于primary key 或unique key的所在列与常数比较
表中只有一个匹配行,读取一次
4、eq_ref primary key 或 unique key 索引的所有部分被连接使用,最多只返回一条符合条件的记录
5、ref    相比eq_ref ,不使用唯一索引,不止于关联查询
6、range  使用索引但是条件是一个范围
7、index  使用全索引查询,一般覆盖索引
8、all    全表扫描

(6)possible_keys
可能用到的索引
(7)key
实际用到的索引
(8)key_len
用到索引里使用的字节数
key_len计算规则如下:
字符串,char(n)和varchar(n),5.0.3以后版本中,n均代表字符数,而不是字节数,如果是utf-8,一个数字
或字母占1个字节,一个汉字占3个字节
char(n):如果存汉字长度就是 3n 字节
varchar(n):如果存汉字则长度是 3n + 2 字节,加的2字节用来存储字符串长度,因为
varchar是变长字符串
数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节
时间类型
date:3字节
timestamp:4字节
datetime:8字节
如果字段允许为 NULL,需要1字节记录是否为 NULL
索引最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理,将前半部分的字符提取出来做索
引。
(9)ref
key列记录的索引中,表查询值所用到到列或者常量
(10)rows
预估读取的行数,不是结果集中的行数
(11)filtered
该列是一个百分比的值,rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指
explain 中的id值比当前表id值小的表)。
(12)Extra
Using index
使用了覆盖索引
Using where
使用了where语句处理结果
Using index condition
where 条件中使用了索引,但是不是覆盖索引
Using temporary
使用了临时表
Using filesort
使用了外部排序,有可能是文件排序,如果数据量比较大,可能会磁盘排序
Select tables optimized away
使用某些聚合函数比如 max min

索引注意事项
1、遵循最左前缀原则
2、不要对索引列做函数操作
3、尽量覆盖索引
4、!=、 <>、 not in、 not exists、is null、 is not null 可能无法使用索引导致全表扫表
5、比较类型要匹配,防止隐式转换
6、or 或 in 不一定走索引
7、区分度低的字段不一定走索引
8、范围查询放后面,有时候可以优化为等值查询
9、like可以用覆盖索引优化
 

更多推荐

Python爬虫技术系列-01请求响应获取-urllib库

Python爬虫技术系列-01请求响应获取-urllib库1urllib库1.1urllib概述1.1.1urllib简介1.1.2urllib的robotparser模块1.1.3request模块1.1.4Error1.1.5parse模块1.2urllib高级应用1.2.1Opener1.2.2代理设置1urll

2023常用的原型设计软件推荐

美观易操作的产品原型可以帮助团队构建积极的用户体验,帮助团队理解产品交互逻辑。因此,可互动、易修改的产品原型设计对产品的点击率和回访率具有重要意义。选择专业的产品原型设计工具,可以为团队和企业带来高效的产品设计体验。本文选择了四种产品原型设计工具,可以为实际工作带来方便。让我们看看。即时设计即时设计是国内首款专业级的U

SpringBoot

SpringBoot1.概念和介绍Spring用于简化Java程序的开发,而SpringBoot为了简化Spring程序开发。SpringBoot是Spring脚手架。可以快速完成Java程序的创建、提高开发效率等。SpringBoot的优点:快速集成框架,提供启动依赖的功能,可以集成各种框架。内置了运行容器、无需配置

酷开科技,让家庭娱乐生活充满激情

近几年,随着智能电视在家庭生活中的广泛应用,让人们的家庭娱乐生活有了更多的选择,但随之而来的是消费者的需求也在不断地升级,个性化、细分化的需求趋势越加凸显。而酷开科技正是抓住了这个机遇,不断赋能家庭娱乐生活场景,获得了更多消费者的青睐。与此同时,酷开科技凭借自身包容的开放生态体验,以及为消费者提供更丰富、更多元的内容,

C++实现观察者模式(包含源码)

文章目录观察者模式一、基本概念二、实现方式三、角色四、过程五、结构图六、构建思路七、完整代码观察者模式一、基本概念观察者模式(又被称为模型(Model)-视图(View)模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供

网络编程.

网络编程就相当于通过网络进行数据的传输,可以传给别人,不仅限于自己;常见软件架构BS优点1.不需要开发客户端,只需要页面+服务器2.不用下载缺点如果应用过大cs优点1.画面精美缺点1.客户端,服务端都要开发三要素:IP设备在网络中的地址,是唯一的标识端口号应用程序在设备中唯一的标识协议数据在网络中传输的规则,常见的协议

解锁网络世界的利器:代理IP与Socks5代理

随着跨界电商、爬虫、网络安全和游戏等领域的不断发展,网络工程师们正面临着越来越多的挑战和机会。在这个信息爆炸的时代,如何更有效地访问、保护和探索网络资源成为了网络工程师们的首要任务。本文将重点介绍代理IP和Socks5代理,它们是网络世界的利器,为网络工程师提供了强大的工具来应对各种技术挑战。代理IP的妙用代理IP是一

海外代理IP是什么?如何使用?

一、海外代理IP是什么?首先,代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器,被称为“中介”,因为它位于最终用户和他们在线访问的网页之间。海外IP代理是就是指从海外地区获取的IP地址,用于将互联网连接路由通过位于不同国家或地区的服务器。这种代理服务允许用户隐藏其真实的地理位置,并获得访问其他国家或

HTTP Tunnel与后门攻击

后门攻击是指利用隐藏在系统中的漏洞或者特殊设计,以获取未授权的访问权限或者绕过安全控制的攻击方式。通过后门攻击,攻击者可以在受感染的系统上进行非法操作、窃取敏感信息或者控制系统。后门攻击可以采用多种形式,其目的都是为了绕过安全机制并获取非法访问权限。主要形式的后门攻击有以下几种:软件后门:攻击者在软件中嵌入恶意代码或漏

预防API漏洞简述

随着对网络应用程序和数字平台的日益依赖,应用程序编程接口(API)的使用变得越来越流行。如果你不熟悉这个术语,API允许应用程序相互通信,它们在现代软件开发中发挥着至关重要的作用。然而,API使用量的增加也导致了API违规数量的增加。当未经授权的个人或系统访问API及其包含的数据时,就会发生这些违规行为。受害者可以证明

基于安卓Java试题库在线考试系统uniapp 微信小程序

本文首先分析了题库app应用程序的需求,从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本题库app,主要实现了学生、教师、测试卷、试题、考试等。总体设计主要包括系统功能设计、该系统里充分综合应用Mysql数据库、JAVA等相关知识。网页界面的构成,具备简单易懂、便捷等特征。设计过程中

热文推荐