B+树
链接:
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
叶子节点冗余了非叶子节点,非叶子节点右指针指向的叶子节点大于等于该非叶子节点,左指针指向的节点小于该非叶子节点
- 一个节点可以有多个元素(和二叉树的区别)
- 叶子结点存了所有的元素(和b树的区别)
- 叶子节点指针相连(和b树的区别)(可以进行字段在一个范围内的条件查询)
Mysql InnoDB引擎,指针为双向连接
页的概念
- 操作系统页的大小4KB
- Mysql InnoDB引擎页的大小16KB
索引
InnoDB默认建立主键索引,如果没有主键,就默认使用唯一字段建立索引,如果没有唯一字段,就默认选择一个建立索引。
主键索引(聚簇索引)
聚簇索引是以主键为索引的,索引和值存放在一起。
联合索引(非聚簇索引)
联合索引是多个属性维持的一个非聚簇索引(数据页只保留主键)
联合索引只存主键,如果sql为select * ,按照查询到的主键再通过主键索引查询,这一步骤叫做回表。
可参考文章:
https://blog.csdn.net/u013308490/article/details/83001060
ps:
- Mysql具有查询优化器,如果全表扫描比索引快,不一定使用索引。
- 对字段进行操作的都不走索引(例如select * from table where id+1 = 5)