MySQL学习之路

1,索引是帮助MySQL高效获取数据的排好序数据结构

      索引底层的数据结构:二叉树,红黑树,Hash,B-Tree

      二叉树:二叉树的特点就是左节点比根节点的值小,而右节点比根节点的值大。当索引类的值为1,2,3,4时,二叉树也就变成列表了,查询效率也会降低。

      红黑树:红黑树也叫二叉平衡树,当二叉树不平衡时,会产生自旋。数据量大时,产生的层级太多,查询叶子节点时效率也不高。

      Hash(查询速度极快):会对数据进行hash运算得到一个散列值,然后根据散列值定位到磁盘上存放值的位置。假如查询时的条件为范围查询而且数据也不是自增时,这种情况就不适用Hash。

      B-Tree:叶子节点之间是没有指针的,所以范围查找也会慢。

      B+Tree:如图。mysql查找时会先把根节点load(I/O)到内存,然后会在内存里做随机查找,在内存里查找时非常快的。每个节点都是排好序的,假如说我们查找30,查找根节点的15到56直接没有找到,就会跟据15和56之间存储的磁盘的地址指针去把下一级节点load到内存中,然后随机查找发现20和49之间没有要查找的指针值,就会根据20与49之间存储的磁盘的地址指针去把下一级节点load到内存中,然后再随机查找,找到30。(mysql每个节点每次load的值默认为16kb)

2,mysql的存储引擎

      MyISAM:索引跟数据,表结构在磁盘中时分开存储的

      索引的查找过程:会先查找myi文件,假如说查找30,首先会查找根节点,然后查找下一个节点,查找最后一个节点,找到30,然后根据30找对data对应的在磁盘的地址,最后根绝磁盘的地址找到myd文件中的data。

  InnoDB:索引跟数据是放在同一个文件中(ibd)。InnoDB表必须要有主键,因为mysql在开发InnoDB的底层B+树时必须要有聚集索引去组织整个的数据。如果不建主键时,MySQL会在你的字段里选一个字段作为主键索引(不重复的列),如果MySQL找不到这种列,MySQL会自动给你建一个隐藏列来作为主键索引。因为整型比较时比较快而且占用空间小,所以InnoDB推荐字段为整型作为索引。因为B+树相邻两个叶子节点中间都有一个指针,假如查询条件为范围查找,而叶子节点从左到右是依次自增的(mysql底层会维护),找到一个值之后后面的值不用比较了,肯定都是满足条件的。而指针存储的是下一个叶子节点的地址值,而且指针是双向的。

  

3,聚集索引和非聚集索引

      聚集索引:叶子节点包含了完整的数据记录。(InnoDB)

      非聚集索引:索引跟数据分开存储的。(MyISAM)

4,联合索引

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值