1:概述
InnoDB支持一下几种常见的索引:
- B+索引(B代表平衡)
B+数索引并不能找到一个给定键值的具体行,只能查找到数据行所在的列。把页读入内存,再在内存缓冲池中进行查找。 - 全文索引
- 哈希索引(自适应的)
2:索引
2.1:B+树简介
P187 innoDB技术内幕
2.2:聚集索引与非聚集索引
聚集索引就是按照每张表的主键来构造一颗B+树。同时叶子节点存放的就是整张表的行记录数据,所以聚集索引得到叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分。一张表只会有一个聚集索引,按照组件生成。
辅助索引: 一张表可以有多个,但不是越多越好。叶子节点并不是包含行记录的全部数据,而是除了包含键值外,包含一个对应行数据的书签,这个书签就是对应的主键。通过辅助索引找到书签后,再通过书签(主键)在聚集索引中取查找一个完整的行记录。
2.3:在InnoDB中B树的分裂
在innoDB中不能总是在页的中间节点进行分裂,因为插入的数据时按照主键顺序自增的插入的。很容易造成页空间的浪费。
比如第一页:23
第二页:789.
那么第一页的剩余位置一般是不会再被插入数据的,就造成了空间的浪费。
在InnoDB中一般是向左或者向右分裂。当前定位到的记录是待插入数据的前一条记录。如果在当前页中当前定位记录的右边还有n条数据记录,不管是否当前页占满,那么分裂点都是当前页占满后的第一条记录。
如果当前记录一件事当前页的最后一条记录,那么带插入记录的第一个记录就是分裂点。
技术内幕201页