索引是什么?
索引是为了加速对表中的数据检索而创建的一种分散存储的数据结构
为什么要用索引
- 索引能极大的减少存储引擎需要扫描的数据量
- 索引可以把随机IO变为顺序IO
- 索引可以帮助我们在进行分组、排序等操作时避免使用临时表
B-Tree
B+Tree
B-Tree与B+Tree的区别
- B+Tree节点关键字搜索采用闭合区间
- B+Tree非叶节点不保存数据相关信息,只保存关键字和节点的引用
- B+Tree关键字对应的数据保存在叶子节点中
- B+Tree叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系
Innodb中B+Tree的表现形式(聚集索引)
Innodb中B+Tree的表现形式(非聚集索引)
最左匹配原则
在索引中关键字进行对比,一定是从左到右依次进行,而且不可跳过
覆盖索引
如果查询列可以通过索引节点中的关键字直接返回,则该索引称为覆盖索引。
因为在innodb引擎中,只有主建是聚集索引,其他索引都是非聚集索引
非聚集索引叶子节点存的是主建的值,通过非聚集索引找到主建值再到聚集索引里面去再查找数据(回表)
下面有一首网上流传的打油诗比较有意思,推荐给大家:
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用。