索引模型
- 哈希表
- 有序数组
- 搜索树
有序数组
有序数组适合查询,每一条数据都已经排好序。不适合增加操作,后边的记录都要移动,成本太高。
n叉树和二叉树哪个好?
二叉树不适合大量的数据,查询起来太慢了。
n叉树查找一个值只需要访问3次硬盘,树的第二层在内存中,访问磁盘的平均次数就减少了。
主键查询优于其他查询
基于非主键索引的查询需要多扫描一颗索引树。
回表查询
主键索引叶子结点存的整行数据,如果查询条件是非索引字段,就会在二级索引树中找到ID的值,在通过ID的值到主键索引树中搜索一次,发生回表过程。
页分裂和页合并操作
如果在叶子节点中间插入数据,原来的数据页已经满了,需要一个新的数据页,挪动数据过去,利用率是50%,这就是页分裂。
相邻的而两个页由于删除了数据,利用率很低,会将数据页合并,这就是页合并。
主键自增和业务字段
自增主键好,因为每次添加数据都是在树中追加,不移动叶子节点。而且主键ID占用的字节小。
如何避免回表
二级索引树查询的结果是主键的值,就不需要再去主键索引查找,这是覆盖索引。
最左前缀原则
先建立一个联合索引,比如(name,age)这两个字段作为联合索引,下面举几个例子:
- 查询条件name字段,符合最左原则
- 查询条件name,age字段,符合最左原则
- 查询age字段,不符合最左原则
索引下推
最左前缀查找数据,要经过回表查询,找到数据后在判断条件是否符合,效率低。
为了节省回表次数,直接在索引表内部进行条件判断,符合条件的再回表查询,效率高。