-
索引就是一种数据结构
-
常见的索引结构:哈希表、有序数据、搜索树
-
哈希表
结构:一种键值对存储的数据结构
实现方式:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在相应的位置里。会出现多个key经过hash计算后,出现重复的情况,处理这种情况的办法就是 拉出一个链表。
优点:等值查询速度非常快
缺点:范围查询要进行全表扫描
适用范围: 适用于等值查询的情况,比如Memcached
及其他一些NoSQL
引擎 -
有序数据
结构: 数组
优点: 等值查询和范围查询都很快。等值查询用二分法,复杂度是O(log(N))
;范围查询直接查到第一个,然后向右遍历即可。
缺点: 更新数据时候成本较高,最坏的情况需要移动所有的数据
适用范围: 只适用于静态存储引擎,不会修改的数据。比如某年的人口数据 -
搜索树
InnoDB
索引结构是B+tree
分为主键索引和非主键索引
主键索引的叶子节点存的是整行数据。在InnoDB
中,也被称为聚簇索引
非主键索引的叶子节点存的是 主键的值,也被称为 二级索引
使用非主键索引会有回表的操作。就是现在二级索引上查到主键的值,然后在根据主键的值查到相应的数据。
主键长度越小,普通索引的叶子节点就越小(因为叶子节点存的是主键的值),普通索引占用的空间也就越小。 -
覆盖索引:覆盖索引可以减少树的搜索次数,显著提查询性能。、
select * from T where k = 3
select id from T where k = 4
覆盖索引 -
最左前缀原则
-
索引下推
5.6版本之后,在索引遍历的过程中,对索引中包含的字段先做判断,直接过滤调不满足的条件的记录,减少回表的次数。
DAY04-索引篇
最新推荐文章于 2024-10-05 19:58:52 发布