详解msql索引

首先,索引的概念是帮助mysql高效获取数据的排好序数据结构。抓住关键词,是有序的,数据结构。
索引有哪些数据结构呢?

  • 二叉树

  • 红黑树

  • Hash表

  • B-Tree
    那么mysql主要用的是哪种索引结构呢?
    在这里插入图片描述
    在此图中可以看出来,mysql主要用的是BTREE和HASH两种结构模式,那他们两个有什么区别呢?

  • Hash
    对索引进行hash计算定位数据存储的位置
    很多时候,hash索引比B+树索引更高效
    仅能满足=和in查询,不支持范围查找
    hash冲突
    当然最主要用的还是B+树,也就是B树的升级版

  • B+树
    数据结构模型,在此附上在线生成各种数据结构模型的网址(在线生成树结构
    下图的B+树,由五个字段值,juan,liushan,wang,wudi,zhao组成的一颗B树
    在这里插入图片描述
    特点:
    从上图的叶子节点就可以看出B树确实是从左到右排好序的。
    非叶子节点不存储data(此data有可能存的是行记录所在的磁盘地址,也有可能存的是主键索引的地址,当然这又与是否是聚集索引和非聚集索引有关);
    叶子节点包含所有的索引字段,通过上图也能看出来,叶子节点,也就是最后一层是所有的索引字段都在此;
    叶子节点之间用指针链接,提高了区间访问性能。(和双向链表类似,有兴趣可以去学一下)

在上图,第一行存在一页当中,第二行又存在 一页当中。每一页差不多分配16KB大小,每一页尽可能多存点数据,当查找数据时,是一次性把当页的数据全取出来,放到内存,进行比对。虽然进行比对也耗费时间,但比起磁盘IO,花费的时间要少的多。
当存一个主键索引为bigInt,8字节,再加上存放下一页的索引地址占用的4字节,一页可以存放多少索引呢?16000/12=1333.差不多每页可以存放1333个索引字段。

猜你喜欢

转载自blog.csdn.net/weixin_42328375/article/details/107472727