MySQL索引:红黑树、B+树、MyISAM存储引擎与Innodb存储引擎

一、二叉搜索树:会退化到链表

二、AVL树(严格的平衡二叉树)

需要满足所有节点的左右子树高度差不超过1,只要不满足,就要通过旋转来保持平衡,不适用于频繁添加、删除操作 

三、红黑树(弱平衡二叉树)

存在树高度较高 的问题

四、B+树

B+树:非叶子节点不存放data,只存储索引(冗余),可以放更多索引

五、MyISAM存储引擎与Innodb存储引擎

MyISAM存储引擎与Innodb存储引擎是对于表而言的。

MyISAM存储引擎对应的表与Innodb的区别:

1.InnoDB支持事务,MyISAM不支持;

2.InnoDB是聚集索引,数据文件和索引绑定在一起,必须要有主键,通过主键索引效率较高。但辅助索引需要两次查询,先查询到主键,然后通过主键查询到数据。

MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

MyISAM存储引擎:(非聚集索引:索引和数据分开存储

首先判断where后面的col1是不是索引字段,如果是,则从MYI文件(B+树)中进行查找,然后找到30对应的地址,再从MYD文件中查找数据。

Innodb存储引擎 (聚集索引:索引和数据在一个文件夹中存储-----叶子节点包含完整的数据记录

不用回表:查询效率高

为什么InnoDB表必须要有主键,并且推荐使用整型的自增主键?

如果没有指明主键,MySQL会查找没有相同值的列作为主键,如果所有列都有相同值,则会新建一个隐藏列作为主键。因为需要主键帮助维护B+树,整型比较大小快,整型存储空间小,自增避免了树的重新平衡。

六、hash索引与B+索引的区别

Hash表计算索引的哈希值,进而得到数据的地址。不支持区间查找

B+树支持区间查找。

  1. 如果是等值查询,那么哈希索引具有明显的优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;
  2. 如果是区间索引,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;
  3. 哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询

 

联合索引:安装各个主键索引进行排序

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值