【开发日记】MySQL-Explain调优学习日记
前言
本文使用的MySQL数据库版本为8.0.28
。
参考的官方文档链接如下:
https://dev.mysql.com/doc/refman/8.0/en/explain-output.html
作用
用来查看MySQL是如何执行语句的信息,使用这个关键字并不会执行这条SQL语句;
EXPLAIN
适用于SELECT
、DELETE
、INSERT、
、REREPLACE
和UPDATE
语句。
使用方式
EXPLAIN SQL语句
如:
EXPLAIN SELECT a,b FROM test_table
执行结果
1、id
列
表示执行顺序;id值越大执行顺序越靠前,id值相同则按照自上而下的顺序执行。
2、rows
列和filtered
列
rows * filtered / 100
可以估算出将要和explain中前一个表进行连接的行数(前一个表指explain中的id值小的表)
3、select_type
列
4、table
列
表示行数据引用的表的名称。还有其他出现的情况可以参考:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain_table
5、partitions
列
版本5.7以前,该项是EXPLAIN PARTITIONS
显示的选项,5.7以后成为了默认选项;该列显示的为分区表命中的分区情况;非分区表该字段为NULL;
6、type
列
这一列表示访问类型,决定MySQL如何查找表中的行,查找数据行记录的大概范围。
常见的结果从优到差依次为:
system
> const
> eq_ref
> ref
> range
> index
> ALL
一般来说,需要保证起码达到range级别,最好达到ref;其他的不常见的结果值请查看官方说明文档,这里只列举常见的。
7、key_len
列
表示索引的长度。
计算规则如下:
另外:如果字段允许NULL,需要增加1字节记录是否为NULL。
8、ref
列
表示查询条件是什么类型,比如查询条件为常量时就是const
9、filtered
列
表示过滤比例,经过索引过滤后剩下多少满足;最大值为100,这意味着未对行进行筛选,将进行全表扫描;
10、Extra
列
这列展示额外信息。
注意
① 如果在查询结果集中既有唯一索引,也有二级索引,这时会使用二级索引;辅助索引占用磁盘链比较少。
② 如果SQL中使用了不等于的时候,大多数情况下无法使用索引,会进行全表扫描。
③ SQL中使用了IS NULL
、IS NOT NULL
大多数情况无法使用索引,会进行全表扫描。
④ SQL中使用LIKE
模糊查询时,写法如%abc...
无法使用索引,会进行全表扫描;百分号在后时会使用索引,如abc%
;可以尝试使用覆盖索引,使被查询的列被索引覆盖。
⑤ 减少使用OR
或IN
使用频率,多数情况下无法使用索引。
- 此文完 -
相关文章
- mysql创建数据库的步骤_MySQL创建数据表
- 掌握MySQL:优雅查询数据库表(mysql查询数据库表)
- MySQL文本编辑器:实现快速开发(mysql文本编辑器)
- MySQL触发器:实现数据库自动化(mysql触发器)
- MySQL如何存储数据(mysql怎么存储数据)
- 建立MySQL用户:一步一步的操作指南(mysql建用户)
- MySQL批量替换字符串:提高数据库性能(mysql批量替换字符串)
- 编程开发之路:PHP 与 MySQL 结缘(php与mysql程序设计)
- MySQL表连接中索引的优化(mysql表连接索引)
- MySQL 远程连接1045错误解决方案(mysql远程1045)
- 轻松学习:设置MySQL字符集的步骤和方法(怎么设置mysql字符集)
- MySQL如何输出SQL语句?25字教程速成!(mysql输出sql)
- 学习MySQL中文语言学习之路(mysql中文语言)
- MySQL:掌握配置命令助力开发(mysql 配置命令)
- 学习MySQL使用SQL语句的技巧(mysql sql语句)
- MySQL行锁表锁:有效解决数据库安全问题(mysql行锁表锁)
- MySQL连接服务器:极速简便操作指南(mysql连接服务器命令)
- MySQL公开课:深入浅出开发数据库应用(mysql公开课)
- C语言与MySQL的数据库连接实践(c 与mysql如何连接)
- B站开启MySQL之旅,学习新技能(b站学习mysql)
- 从0基础学习CMD操作MySQL(cmd操作mysql教程)
- APM技术提供MySQL数据库持久存储(Apm存储mysql)
- MySQL中出现内容显示问号的问题解决方法(mysql中内容显示问号)
- MySQL的三大组件简介(mysql三大组件)
- 掌握MySQL需要多长时间(mysql一般学习多久)
- 解决MySQL停止服务问题,详细操作方法(mysql 不能停止服务)
- MySQL光标消失的可能解决方案(mysql不显示光标)
- MySQL不能做到全联接,为什么(mysql不支持全联)