mysql索引分析关键字_mysql 索引失效 explain关键字分析

为什么要使用索引

当表记录过多,查询效率低下,通过合理的添加索引可以提高查询效率。

什么情况下不需要使用索引

表记录少

表需要频繁更新

查询字段使用频率表低

explain

select_type sql语句的查找类型

simple

普通查询

SELECT id FROM orders

subquery

包含子查询的外层的类型为primary

EXPLAIN SELECT (SELECT id from orders) from orders;

primary

包含子查询的 外层的第一条记录为primary

EXPLAIN SELECT (SELECT id from orders) from orders;

union union result

包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null

EXPLAIN SELECT id from orders union select id from goods;

type 索引类型

system

const 的特殊情况,只有一条记录的时候或者是空表

const

使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const

eq_ref

关键字:连接字段主键或者唯一性索引。

此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 '=', 查询效率较高.

ref

普通非唯一索引,使用“=”值健查询非主键,或者使用了最左前缀规则索引查询,关联查询的时候,关联字段都需要建立索引

range

索引范围查询,常见于使用>,

index

关键字:条件是出现在索引树中的节点的。可能没有完全匹配索引。

索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可

以使用索引排序或者分组的查询。

all

这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录

possible_keys

此次查询中可能选用的索引

key

查询时候,真正使用的索引

key_len

用于处理查询的索引长度。只计算查询时候使用的索引长度,如果是多列索引。并且只计算where条件使用到的索引长度,排序时候使用到索引也不会计算该索引的长度

ref

如果是关联查询,被驱动表的执行计划这里会显示驱动表的关联字段

如果是条件使用的表达式或者函数,或者内部发生了隐式转换,则会显示func

如果使用了常熟或者等值查询,会显示const

rows

执行计划中估算饿的扫描行数,不精确 myisam是精确值,innodb 使用了mvcc机制,值不准确

extra关键字段

distanct

select中使用了distanct关键字

no tables used

using filesort

排序的时候无法使用索引,常见于order by , group by

MySQL会使用一个外部的索引排序,不是按照索引顺序排序读取

mysql无法利用索引完成排序成为文件排序

using index

查询的时候,不需要通过回表查询,直接通过索引记录就可以获取信息

表示相应的查询中,使用了覆盖索引,避免了访问表的的数据行

如果同时出现了using where, 说明索引被用来执行查找索引键值

如果没有同时出现using where, 说明索引用来读取数据,而不是用来执行查找操作

using temporary

使用临时表存储中间结果

using where

表示存储引擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤。

查询条件中分为限制条件和检查条件,5.6之前,存储引擎只能根据限制条件扫描数据并返回,然

后server层根据检查条件进行过滤再返回真正符合查询的数据。5.6.x之后支持ICP特性,可以把检

查条件也下推到存储引擎层,不符合检查条件和限制条件的数据,直接不读取,这样就大大减少了

存储引擎扫描的记录数量。extra列显示using index condition

索引失效分析

组合索引全匹配

遵循最左前缀原则

索引不要做任何的操作。计算,函数,类型转换,都会导致索引失效

在复合索引中,索引字段范围右侧的列,无法使用索引

尽量使用覆盖索引,可以避免回表操作

索引上不要使用不等于

主键字段不要判null 非主键可以判空

索引字段使用like的通配符不能用在开头

索引字段如果是字符串要加单引号

索引字段不要使用or

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值