1.索引的基础概念
大量插入数据的时候,会有一个数据页分裂的过程.
其中的自增主键是从小到大依次排序的,所以每一次的插入都会伴随数据行从一个数据页挪动到另一个数据页.要快速从大量的数据页中找到一行数据,根据主键ID去和每一个数据页的第一行的主键ID做对比就知道这行数据到底是在哪一个数据页中.找到这个数据页之后只需要在这个数据页中遍历即可
2.由双向链表演化到B+树
一个大数据量的表中,那么他的主键必定是有很多的,那么他的主键的索引也是很多的.
一条一条的索引就会组成一个索引页(生成相应的索引页号),也会像数据页那样双向链表连起来
数据量再大一点,索引页也发生裂变,也需要查索引页的索引来快速查找(将索引页中的最小主键ID拿出来记录,相当于好几个数据页中的最小主键ID值)
于是就变成了一颗树,通过二分法判断大小一层一层的查下来
3.什么是聚簇索引
其实基于主键的索引是可以将这个索引页和数据页连起来的,数据页就像这颗B+树上的叶子节点一样,所以基于主键的索引B+树被称为聚簇索引
4.什么叫做二级索引以及回表
基于主键的索引树被称为聚簇索引,那么基于普通字段的索引就被称为二级索引
因为该索引找到的值只是主键值,还需要通过聚簇索引才能找到完整的一条数据.所以称作为二级索引
那么这个过程被称为回表
5.联合索引的查询方式
两个字段的联合索引(A,B) 叶子节点(数据页)是先排序A再排序B(A值一样的数据按B排序)整理好的
那么他的查询方式是先二分法先查最左边的A字段,然后在找B字段的索引,然后再回表,所以才会有最左原则
6.索引注意的点
6.1.每一个索引就会对应一个B+树,所以增删改查维护起来是很复杂的,
6.2.同时索引页也是在数据库中,所以去维护索引也是要耗时IO的
所以尽量少建索引来优化查询,而不是一味的建索引