MySQL中的各类索引

一.聚簇索引和非聚簇索引

在MySQL中,innodb引擎的索引储存是聚簇索引,myisam引擎的索引储存是非聚簇索引。
聚簇索引:将数据和索引放在一起,查询通过聚簇索引可以直接获取数据,相比非聚簇索引需要第二次查询(非覆盖索引的情况下)效率要高。聚簇索引对于范围查询的效率很高,因为其数据是按照大小排列的。
非聚簇索引:又叫二级索引。二级索引的叶子节点中保存的不是指向行的物理指针,而是行的主键值。当通过二级索引查找行,存储引擎需要在二级索引中找到相应的叶子节点,获得行的主键值,然后使用主键去聚簇索引中查找数据行,这需要两次B-Tree查找

注:在实现MySQL的读写分离时,通常使用innodb引擎来写数据库(主),使用myisam引擎来读数据库(从)。

二.hash索引和BTree索引

在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,在MySQL文档里,实际上是把B+树索引写成了BTREE,MySQL所用的索引是B+树索引

两者区别:
1.hash是比btree快,但是hash只能进行等值查询=,<=>,hash索引不可以进行范围查询。btree索引可以进行范围查询。
2.数据量大的时候反而BTree较快。
3.在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题,两个对象计算出来的hash值有可能是相同的,不稳定。
4.哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询)。
5.哈希索引也不支持多列联合索引的最左匹配规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值