MySQl的索引数据结构小结

目录

索引

BTree

B+Tree(InnoDB引擎,默认的是B+树)

索引的分类

Hash索引和B+Tree的索引

聚簇索引和非聚簇索引

主键索引设置成自增的好处

联合索引


索引

是排好序的数据结构

结构自行构造的网站 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

了解索引的数据结构比较关键,因为涉及到后期理解为什么工作过程中的sql语句走的是全表扫描。

BTree

一个节点可以存储多个数据

左边的数值<中间的数值<右边的数值

如果数值比较多的话,可能会造成树比较高,搜索次数比较多

B+Tree(InnoDB引擎,默认的是B+树)

有点像跳跃表,每个节点可以放多个数值,然后根据规则选出一个候选人出来作为上一级

  • 叶子节点包括了所有的数值
  • 叶子节点之间通过双向的指针进行链接,1、可以支持范围查找。2、加快了搜索速度。
  • 非叶子节点作为冗余索引加快了搜索的速度,树的高度也不会太高。

索引的分类

Hash索引和B+Tree的索引

具体的好处可以看https://www.zhihu.com/question/67094336

大概就是:Hash索引更快,是数组+链表的结构,通过把值代入hash函数计算到数组index,再遍历挂在数组的链表得到最后硬盘里数据行所在的地址。

但是无法支持order by,所以比较少见。存放比较长的url等的信息的时候可以用这个比较快。

innoDB有自适应的索引可以灵活的使用到这个Hash索引。

聚簇索引和非聚簇索引

描述

主键索引(聚簇索引)叶子节点存放的是数据行所在的物理地址。

非主键索引(非聚簇索引)叶子节点存放的是主键的值,通过主键的值,去主键索引找数据行的物理地址(回表)。

MySQl主键索引是非主键索引,其他是非聚簇索引,好处:1、保持数据的一致性。坏处:非主键索引需要回表找到数据行地址。

      

主键索引设置成自增的好处

注意:MySQL建议每个表设置一个自增的主键。

好处:1、方便查找,通过主键可以顺序排序,不用全表扫描。

2、比起UUID来说,可以减少IO过程的内存损耗(要把索引从磁盘读取到内存后再进行扫描)

然而:因为工作中我用到oracle会比较多,所以一般主键是UUID更多些,估计原因如下

优点(转自:https://blog.csdn.net/yinni11/article/details/79897696
能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
在oracle做数据迁移的时候不会因为表的sequence不连续而出现问题

联合索引

根据第一个条件进行排序,第一个条件相同的情况下,用第二个条件进行排序,所以有个最左前缀原则(使用联合索引最左边的条件放where里面才会cover index)

主键索引和唯一索引的区别

https://www.cnblogs.com/-619569179/p/6528896.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值