mysql索引使用:一模型两原则

mysql的索引使用正确是否直接影响项目数据的crud性能。下面总结下个人对mysql索引的理解及两个使用原则。

一、索引模型

引擎为InnoDB时,索引的数据结构为B+树。具体的B+树结构我们可以看其他资料,下面主要总结下通过主键索引和二级索引查找数据的过程。

表基本信息:表名是t,主键是id,二级索引是K。

1.1通过主键索引查询

执行语句:

select * from t whree id=5;

执行过程:

a.第一次磁盘io,取出的数据页为p1;

b.由于所要查询的id为5,比7小,所以要进行第二次磁盘io,拿出磁盘页(p3);

c.在p3是叶子节点,是链表结构,可以直接按照顺序找到id(5)所对应的数据行R4。

主键索引特点:

1.中间节点存放的是主键

2.叶子结点的内容是数据页(Page),一个数据页可以放多个数据行(记录);

1.2通过二级索引查询

执行sql:

select * from t where k='500'

执行过程:

a.第一次磁盘io,取出的数据页为p4;

b.由于所要查询的k为500,比700小,所以要进行第二次磁盘io,拿出磁盘页(p6);

c.在p6是叶子节点,是链表结构,可以直接按照顺序找到k(500)所对应的id(5);

d.根据id(5)再通过主键索引去查询,最后找到R4数据行。

二级索引的特点:

1.中间节点的内容是二级索引

2.叶子结点的内容是主键

二、索引的最左前缀原则

索引index1:(a,b,c)

查询时

select * from table where a = '1'  

select * from table where a = '1' and b = ‘2’  

select * from table where a = '1' and b = ‘2’  and c='3'

按照a、b、c顺序走的,会走索引。b、a、c / c、a、b等不走索引。

因此在写查询时尽量遵循最左前缀原则。

三、利用覆盖索引原则

当所要查询的字段个数不是很多时,利用好覆盖索引进行查询操作, 避免回表。

file sort:

如果order by的列上有索引,那么就可以利用索引的有序性进行排序;

如果没有索引,那么就是file_sort,可以理解为外部排序,就是把select的数据,按照order by的列 ,在内存中进行一次排序,然后返回结果。

覆盖索引:

索引所拥有的字段能够满足查询的需求,而不用回表再去查找。

判断是否使用覆盖索引标准:

explain 执行语句,extra 列会出现: using index。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值