1.索引
定义:一种具有固定规则(排序),具有数据结构的,存储在磁盘上的,一批可以快速定位数据的文件
mysql的索引数据结构B+Tree
2…数据结构
1.二叉树
问题:如果跟节点没选好,有可能数据向一边倾斜,链式查询
2.平衡二叉树
叶子节点的高度偏差不能超过1
如果高度差超过1,可以通过左旋、右旋(自己去普及)达到平衡
问题一:效率低,数据量很大时,数变得很高,磁盘io次数很多
问题二:查询不稳定,有可能一次,也有可能很多次
问题三:节点数据太少,没能充分利用磁盘io(默认一次io传输4k数据)
3.B-Tree
每个节点可以保存多个关键字,每次io默认16k
相比二叉树:
树高大大减小,充分利用磁盘(每个节点放满16k)
4.B+Tree
与B-Tree类似
B+Tree特点:
特点1:半闭合的区间
特点2:根与支节点只保存关键字和子节点引用,不保存具体数据的位置信息
特点3:叶子节点的每个元素都有下个元素的引用,所有子节点形成链表
与B-Tree比较
优势一:全表扫描快,只需扫描叶子即可,叶子有数据的引用
优势二:排序功能强,因为叶子天然排序
优势三:一次io获取的关键字更多(由于根和支节点只保存关键字),一次读的跟多,树高小
优势四:查询效率更稳定(看似b-Tree效率高,但是由于树高小,磁盘io少)