1 索引介绍
mysql两大块重要内容索引和事务,索引是一般用于查询,事务一般用于插入修改操作。对于磁盘存储一般采用B树和B+树。
B树----》mongodb;B+树----》mysql
1 树演变过程:
树–》二叉树–》二叉排序树(二叉搜索树)–》平衡二叉树(AVL/红黑树)—>多路平衡搜索树
如下图:
2 B树、B+树
B树性质M阶B树:性质
1 每结点至少拥有M颗树
2 根结点至少有两颗子树
3 非根结点其余分支结点至少拥有M/2
4 叶子结点都在同一层
5 关键字k,则字树K+1,关键字递增
6 关键字 ceil(M/2) -1 <= n <= M-1
注意:一般在设计的时候,是将//度设为t,//阶:2t //结点最大元素: 2t-1
B+树性质
在B树基础上,a:将每一层的结点都用双向链表串联起来。
b:B树每个结点都存储了key,value,而B+树只有叶子结点才存储value,非叶子结点只存储比较key
3 B树与磁盘存储关系
对于磁盘存储一般就是采用B树和B+树来进行存储;由于内存存储是有限的,所以就需要磁盘存储数据,然后内存加载部分数据到内存计算查找。磁盘分为磁柱,磁盘,磁片,扇区等等概念;我们可以简单理解一个扇区就是一个B树或者B+树的结点。
4 mysql中的B+树结构
对于经典的B+树是在B树的基础上只做了处理:只有叶子结点才存储数据,非叶子结点存储比较key。
而对于mysql而言使用的B+树是在此基础上进行了优化:叶子结点存储数据,每一层都是采用shuang
关键点:
1 比较key,有序结构,所有data都在叶子结点,高度平衡
2 B+树的高度,代表磁盘IO次数 2-4层
3 结点的大小 默认16K
4 叶子结点当中存储所有data(innodb中,聚集索引存储数据行data和索引,myisam出差索引+数据指针;
非叶子结点只存储所有信息比较key。
2 索引分类
主要分为:主键索引,唯一索引,普通索引,组合索引以及全文索引
主键索引
非空唯一索引,一个表只有一个主键索引;在innodb中,主键索引B+树包含表数据信息;
PRIMARY KEY(key)
唯一索引
不可以出现相同的值,可以有NULL值
UNIQUE(key)
普通索引
允许出现相同的索引内容;
INDEX(key)
-- OR
KEY(key[,..