索引类型
哈希表,有序表,搜索树
哈希表:mongodb,redis
有序表:有序数组索引只适用于静态存储引擎
搜索树:innodbs等数据引擎
innodbs索引类型
主键索引,普通索引
主键索引:节点值为主键,叶子节点里存储的是整行数据。所以主键索引在innodbs也称为聚簇索引。所以一个表就是一个主键b+树。
普通索引:节点存储key-value的形式,key是普通索引字段值,value是主键。因此也被称为二级索引。普通索引查到主键后,会再进入主键树再查一次,这个过程叫做回表。因此要尽量使用主键来做查询。
索引维护
插入新数据:根据b+树算法,子节点的key都小于父节点,并且进行从小到大的排序,如果插入一个新数据的索引值在在页的中间,那么需要挪动该值后的节点。这样会导致插入性能变差。所以如果使用自增id,那么每条新数据都是直接在页后追加节点。
页分裂:当一页数据放不下时,就会申请新页,然后挪一部分数据过去,这个过程叫页分裂。如果删除了一部分数据,引擎判断页的使用率下降,将会合并页,可以认为是分裂过程的逆过程。