MySQL优化_system const eq_ref ref

字段含义
idselect查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序
select_type表示select的类型,常见的类型有simple(简单表,即不使用表连接或子查询)、primary(主查询,即外层的查询)、union(union中的第二或者后面的查询语句)、subquery(子查询中的第一个select)等
table输出结果集的表
type表示表的连接类型,性能由好到差的连接类型为(system–>const–>eq_ref–>ref–>ref_or_null–>index_merge–>index_subquery–>range–>index -->all)
possible_keys表示查询时可能使用的索引
key表示实际使用的索引
key_len索引字段的长度
rows扫描行的数量
extra执行情况的说明和描述
分析执行计划-Explain之id
① id相同表示加载表的顺序从上倒下
② id不同 id值越大 优先级越高 越先被执行
③ id有相同 也有不同 同时存在 id相同的可以认为是一组,从上往下执行,在所有的组中,id的值越大,优先级越高,越先执行

分析执行计划-Explain之select_type
simple:没有子查询和union
primary:主查询,也就是子查询中的最外层查询
subquery:在select 和where中包含子查询
derived:在from包含子查询,被标记为临时表
union:存在union语句

分析执行计划-Explain之type
type含义
NULLMySQL不访问任何表,索引,直接返回结果
system系统表,少量数据,往往不需要进行磁盘IO,如果是5.7及以上版本的话就不是system了而是all,即使只有一条记录
const命中主键或者唯一索引,被链接的部分是一个常量值
eq_ref对于前表的每一行,后表只有一行被扫描.①join查询,②命中主键或者非空唯一索引③等值连接
ref非唯一索引扫描,返回匹配某个单独值的所有行,对于前表的每一行,后表可能有多余一行的数据被扫描
range只检索给定返回的行,使用一个索引来选择行,where 之后出现between,<,>,in等操作
index需要扫描索引上的全部数据
all全表扫描,此时id上无索引

结果值从好到坏依次是:system > const > eq_ref > ref > range > index > all

eg:
-- NULL
	select now();select rand(); ....等等函数

-- system
	select \* from mysql.tables_priv

-- const
	select \* from user where uid=2;

-- eq_ref 左表有主键,而且左表的每一行和右表的每一行刚好匹配
    select  \* from a,b where a.id=b.id; -- a表id为主键
    
-- ref  左表是普通索引,和右表匹配时可能会匹配多行
	select  \* from a,b where a.id=b.id; -- a表id为普通索引
-- range
	select  \* from user where id > 2;

-- index 扫描索引列
	select id from user;

-- all
	select \* from user;

分析执行计划-Explain之table
显示这一步所访问数据库中表名称,有时不是真实的表名,可能是简称

分析执行计划-Explain之rows
扫描行的数量

分析执行计划-Explain之key
possible_key:显示可能应用在这张表的索引,一个或者多个
key:实际使用的索引,如果是null,则没有使用索引
key_len:表示索引中使用的字节数,改值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好.

索引优化

索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题

避免索引失效应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值