mysql索引优化

17 篇文章 0 订阅
13 篇文章 1 订阅

一、select_type

1、simple

简单查询

2、primary derived

主查询 和 from子查询

3、union

union 和 union字段顺序,数量、类型都要相同

union会去重并且排序

union all不会去重和排序

4、subquery

where 子查询

二、type

表示表的连接类型。

  • 数据准备

在这里插入图片描述

在这里插入图片描述

1、 system

表仅有一行,这是const类型的特列,平时不会出现,这个也可以忽略不计。

2、const

数据表最多只有一个匹配行,因为只匹配一行数据,所以很快,常用于PRIMARY KEY或者UNIQUE索引的查询,可理解为const是最优化的。

EXPLAIN SELECT * from test where id=“1”

在这里插入图片描述

EXPLAIN SELECT * from test where b=“1”

在这里插入图片描述

3、eq_ref

用于联表查询的情况,按联表的主键或唯一键联合查询

4、all

没用到索引

EXPLAIN SELECT * from test where a=1

当a的字段类型是varchar时,就算给a设置索引,第一条语句也不会使用索引,因为进行了类型转换。

5、ref

查询条件索引既不是UNIQUE也不是PRIMARY KEY的情况。

EXPLAIN SELECT * from test where a=“1”

6、range

主键、唯一键、普通索引的范围查询

在这里插入图片描述

7、index

索引覆盖,该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小

三、possible_keys

指出mysql能使用哪个索引在表中找到行,如果为NULL,说明没有使用索引

四、key

显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。

可以强制使用索引或者忽略索引

在这里插入图片描述

五、key_len

显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。

注意:key_len是确定了MySQL将实际使用的索引长度

六、ref

显示使用哪个列或常数与key一起从表中选择行。

七、 rows

显示MySQL认为它执行查询时必须检查的行数

八、Extra

该列包含MySQL解决查询的详细信息

· Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。

· Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

· range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。

· Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。

· Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。

· Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。

· Using where:WHERE 子句用于限制哪一个行匹配下一个表或发送到客户。

· Using sort_union(…), Using union(…), Using intersect(…):这些函数说明如何为index_merge联接类型合并索引扫描。

· Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。

九、不能使用索引的情况

1、在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不起作用。只有“%”不在第一个位置,索引才会生效。

在这里插入图片描述

在这里插入图片描述

2、联合索引最左匹配原则

联合索引的最左原则就是建立索引KEY union_index (a,b,c)时,等于建立了(a)、(a,b)、(a,b,c)三个索引,从形式上看就是索引向左侧聚集,所以叫做最左原则,因此最常用的条件应该放到联合索引的组左侧。

利用联合索引加速查询时,联合查询条件符合“交换律”,也就是where a = 1 and b = 1 等价于 where b = 1 and a = 1,这两种写法都能利用索引KEY union_index (a,b,c)。
在这里插入图片描述

在这里插入图片描述

normal键也是一样

3、使用OR关键字的查询

查询语句的查询条件中只有OR关键字,且OR前后的两个条件中的列都是索引时,索引才会生效,否则,索引不生效。

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iywtU6ps-1587714321312)(**12**)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值