目录
索引
概述
索引是帮助MySQL高效获取数据的数据结构。
MySQL索引原理和数据结构介绍
存储位置
索引的数据文件也需要持久化存储,存储到磁盘中,当需要时把数据从磁盘中读取到内存中,加快数据的访问(分块读取)
局部性原理:
数据和程序都有聚集成群的倾向,之前被查过的数据很快会被再次查询,冷热数据
磁盘预读
在数据交换的时候,会有一个基本的逻辑单位,称之为页,一般占用空间是4K/8K,跟操作系统相关,每次在进行数据获取的时候,可以获取页的整数倍(读取数据时,以页的整数倍读取数据,MySQL中innodb的存储引擎读取数据的时候会读取16K(innodb_page_size value=16K))
数据结构(B+树 )
K-V格式的数据:哈希表、树
哈希表
hashmap用的红黑树
缺点:
-
范围查找需要遍历每一个元素,如果全部是等值查找可以用Hash表
-
碰撞--冲突:数据散列不均匀,浪费存储空间,因此要求设计足够好的hash算法
-
如果存储大量数据,会占用大量的存储空间,而且不能够分块读取
存储引擎(数据文件在存储介质中的不同组织形式)
-
innodb
-
MyISAM
-
memory (hash索引,MySQL官网介绍)
树(二叉树、BST、AVL、红黑树、B树、B+树)
-
二叉树、BST、AVL、红黑树 二叉树有且仅有两个分支
-
BST、AVL、红黑树 有序二叉树
-
AVL、红黑树 二叉平衡树
B树、B+树
多叉有序树
degree:阶/度,表示每个节点至多存放多少条记录(degree