索引类型
-
1.索引出现为了提高数据查询速度
-
2.索引常见模型为哈希表、有序数组、搜索树
-
3.哈希表为键值存储的数据结构
存储逻辑:把值放在数组里,用一个哈希函数把key换成确定的位置,把value放在数组的这个位置,多个key值经过哈希函数的换算,会出现同一个值的情况
哈希表无序,所以哈希表做区间查询效率不高 ,只适用于只有等值查询的场景如Memcached引擎 -
4.有序数组在等值查询和范围查询性能优秀
有序数组更新效率低,插入数据必须挪动后面的所有记录,有序数组只适用于静态存储引擎 -
5.二叉树搜索效率最高,但索引不止在内存,还有在写磁盘中,查询速度慢
N叉树读写性能好,适配磁盘访问模式
1.InnoDB的索引模型
-
1.InnoDB中,表以主键为索引存放,为索引组织表,索引存放在B+树种,每一个索引对应一颗B+树
-
2.索引类型分为主键类型和非主键类型
-
3.主键类型存子节点内容是整行数据(聚簇索引)
非主键索引存放的是主键的值(二级索引) -
4.两种区别:(1.主键索引只需要搜索一颗B+树
(2.非主键索引需要搜索此索引树,得到id到id索引树,即回表
非主键索引树需要多扫描一颗索引树
2.索引维护
-
1.列分页:(1.若数据页满,需要申请新的数据页挪动部分数据,性能变低
(2.影响数据页的利用率,一个页分成两页 -
2.列合并:两个相邻的页删除了数据,利用率变低会合并(分裂过程的逆过程)
-
3.不指定id插入的数据为追加数据,不涉及挪动记录,不会触发节点分裂
-
4.主键长度越小,普通索引的叶子节点越小,普票索引占用空间越小