关于mysql索引的一些问题

1. 什么叫聚集索引与普通索引

     聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引

     普通索引的叶子节点存储主键值。

        假设有下表table

        table  (id PK, name KEY, sex, flag);

表中有四条记录:

1, shenjian, m, A

3, zhangsan, m, A

5, lisi, m, A

9, wangwu, f, B   

则该表的聚集索引和普通索引的B+树的数据结构如下图所示。

 如上图左右聚集索引,右为普通索引。从普通索引是无法直接定位到行记录的,只能查询到主键的值。

2.  既然普通索引不能直接插到行的记录,那普通索引的查询过程是怎么样的呢?

      

 

粉红色路径,即为普通索引的查询过程,需要扫码两遍索引树:

(1)先通过普通索引定位到主键值id=5;

(2)在通过聚集索引定位到行记录;

这就是所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

3.什么是索引覆盖 (Covering index) ?

        只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值