Mysql 的索引底层原理及数据结构详解

Mysql 的索引底层原理

1.什么是索引?

   索引是一种排好序的数据结构,mysql目前默认使用的是b+树。

2.为什么使用b+树?

    例如表table 数据

 

idname
1zs
2ls
3sa
4zl
5wmz
6zs
7sd


     这这个表里,没有加索引,要查询id= 6的数据,至少要查询6次,才能找到想要的那条数据  select * from table where id = 6;   

  1) 二叉树     

      最多只有两个叶子节点,也可以没有叶子节点 

    为什么不选用二叉树?

      根据二叉树的特点,如果是顺序的节点进行排列,则会形成链表的结构,此时查询跟没有使用索引是一样的效果,查询的次数过多,故不推荐使用。

      

2) 红黑树

    这种树结构用的比较多,例如jdk1.8的hashmap中就是这树结构,但是mysql仍然没有采用这种树结构。

   平衡二叉树:即左右节点的长度超过2时,会自动旋转达到平衡的状态,旋转次数过多,效率较低。

   红黑树特点,节点不是红就是黑,从任一节点到叶子的节点包含的黑色节点数目都是相同的,旋转的次数较少,效率高,但是树的高度较高,因此查询的次数仍然较多。

    

   3)hash

        这目前也是mysql官方保存的一种索引结构。

       hash索引主要是将该列进行hash计算之后指向一个地址,每次查询的时候,时间复杂度为O(1),查询效率非常高。但是由于生成的hash码是无规则的,所以不能进行排序操作,也不能进行范围查询,所以只适用于确定值的查询。

4)b+树

     官方推荐使用索引。

     b树:每个节点有多个叶子节点,根节点到每个叶子节点的长度相同,高度为m,叶子节点最多为m-1;且每个中间节点和叶子节点均有数据

      b树可以限制树的高度,从而达到查询次数较少目的。但是范围查询仍然需要进行遍历操作,所以对于范围的查询不太适用。

     

     b+树:b+树的数据集中在叶子节点,并且索引是按顺序进行存放的,所以可以很快的进行范围的查询。

      

3.mysql数据库的引擎

  1)myisam

      myisam引擎在本地生成三个文件,后缀分别为*.frm,*.MYI,*.MYD,   frm文件是创建的表结构,MYI是索引文件,MYD是数据文件

      不支持事务操作。

      非聚集索引:索引和数据没有绑定在一起

 2)innodb

      innodb引擎在本地生成两个文件,后缀分别为*.frm,*.ibd,  frm 文件是创建的表结构,ibd是文件包含了索引以及数据

     支持事务操作。

      聚集索引:索引和数据绑定在一起

4.使用自增的整型作为主键索引

    使用整型而不是uuid这种类型,因为在遍历比较的时候,整型比字符串类型速度更快

    使用自增长,能够更快的生成b+树,性能能够得到提升。

   

     

 

 

 

    

     

     

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值