ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql性能优化器explain

2022-03-02 15:00:20  阅读:159  来源: 互联网

标签:union ref explain 查询 索引 mysql 优化 select


explain作用:

使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈。

通过explain可以得到以下信息:
  • 表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询

语法:

explain + sql语句

image

主要字段包括id、select_type、table、partitions、type、possible_keys、key、ref、rows、filtered、extra,各字段含义如下:

id:

  • select查询的序列号,表示查询执行select字句或操作表的顺序,执行顺序从大到小执行。
  • 当包含子查询的时候。先执行子查询,所以id值最大。

select_type:

表示查询中每个select字句的类型,常用种类有:

类型 含义
Simple 查询中不包含子查询或者union
Primary 查询中若包含任何复杂的子部分,最外层查询被标记为Primary
subquery 在select或where列表中包含了子查询,该子查询被标记为subquery
Derived 在from列表中包含的子查询,被标记为Derived
union 若第二个select出现在union后,则被标记为union
union result 从union表获取结果的select被标记为union result

table:

表名称

type:

表示mysql在表中找到所需行的方式,常见有:
ALL:mysql进行全表扫描,性能最差
index:全表扫描,但是只遍历索引树
range:对索引的扫描开始于某一点,返回匹配值,常见于between,>,<的查询
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,使用非唯一索引或唯一索引的非唯一前缀进行的查询
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引值
const:表最多只有一行匹配,用于主键或者唯一索引
system:表只有一行
fulltext:全文搜索
ref_or_null:与ref类似,但包括null
index_merge:出现了索引合并优化(包括交集,并集以及交集之间的并集)
unique_subquery:在in查询三种

possible_keys:

显示查询可能使用那些索引来查找

  • explain查看执行计划,可能出现possible_keys有列,而key显示null的情况,这种情况是因为表中数据不多,mysql认为索引对这个查询帮助不大,选择了全表扫描
  • 如果possible_keys列为null,则没有相关的索引,这种情况,可以通过检查where字句看是否可以创建一个适当的索引来提高查询性能

key:

显示mysql采用那个索引来优化对该表的访问
如果没有使用索引,该列为null,想强制mysql使用或忽略possible_keys列中的索引,在查询中使用force idnex

key_len:

显示了mysql在索引里使用的字节数,通过整个值可以算出具体使用了索引中的那些列

ref:

显示了在key列记录的索引中,表查找所用到的列或常量,常见的有:const(常量),id(字段名)

rows

mysql要扫描多少行数据,才能找到你要的数据

Extra额外的信息

Using index:使用覆盖索引
Using where:使用where语句来处理,并且查询的列没有被所有覆盖
user index condition:查询的列不完全被所有覆盖,where条件中是一个查询的范围
using temporary:mysql需要创建一张临时表来处理查询
using filesort:将用外部排序而不是索引排序,数据较小的时候从内部排序,否则需要在磁盘完成排序

标签:union,ref,explain,查询,索引,mysql,优化,select
来源: https://www.cnblogs.com/junhao86/p/15955125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有