mysql数据库优化索引_Mysql数据库优化必知必会之索引浅析

一、引擎简介

mysql的innodb引擎索引数据是一起存放,一张表是按主键顺序存放的索引组织表,如果没有主键,会有个rowid,按rowid顺序存放的。

mysql的myisam引擎索引和数据是分开存放的,索引里面存的是数据地址的指针。

二、innodb引擎下的索引

1.索引类型

索引默认使用的b+树,也有hash索引,hash索引适合场景等值查找比较快,所以B+树使用的比较多,大家简单了解下,b+树是多叉平衡树,叶子节点存具体的数据,叶子节点又组成了一个链表,非叶子节点存索引。不过注意下,主键索引叶子节点存整条数据,非主键索引叶子节点存的是主键的值。

2.什么叫覆盖索引?

就是索引里面包含了主键,、

而索引里面的主键的好处是什么呢?

如果联合索引不包含主键,通过前面的简单了解,我们知道数据在主键索引上,我们首先遍历联合索引树,拿到主键值,再根据主键值去主键索引树拿具体的数据,这个过程叫做回表。

如果联合索引的包含主键,就不需要这个回表过程,效率不就杠杠的了吗

3.什么叫最左匹配原则

譬如索引是(a,b,c)

1)select * from t where a = 1 and b =2 and c =3 能用上这个索引。注意:与where条件的a的顺序无关,只要where条件里面有个a这个条件

2)select * from t where b =2 就不会用索引

这就是最左匹配原则

例:表总共行数是12

3a8a9e53a77d6006641963e47ee9e567.png

2ca066395106874fab505ec95790cd9e.png

a05481d640f4e75687a542d915c1d421.png

这里有个问题就是第二条语句为什么用不上这个索引呢?

因为是b+树是有序的啊,它是按索引的里面第一个值排序,当一个值相同时,按照第二个值排序,依次类推,第一条语句查找进行a的比较,a相同在b的比较,依次类推。

所以索引的选择是很重要,根据具体的业务场景来选择,注意:索引过多又要占用磁盘,因为索引和数据最终都要存在磁盘上,增删改又要维护这颗索引树来保证有序性,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值