Mysql索引知识点
都是工作中常用的知识点,列了一个大纲,如果有理解错误的地方,欢迎斧正:首先说一下MySQL常用的两种引擎以及特点:InnoDB引擎:底层使用B+Tree结构,如果是主键索引,叶子节点存储整行数据,如非主键索引,叶子节点存储主键id,具体如图:主键索引B+Tree存储结构:非主键索引B+Tree存储结构:看这两张截图,再去理解一下上面的话就容易的多了。MyISAM引擎:底层采用的是B-Tree结构,
·
前言
都是工作中常用的知识点,涉及实战方面的会单独总结一篇文章,这里只是列了一个大纲,如果有理解错误的地方,欢迎斧正:
首先说一下MySQL常用的两种引擎以及特点:
InnoDB引擎
- 支持事务、外键和行级锁;
- 底层使用B+Tree结构,如果是主键索引,叶子节点存储整行数据,如非主键索引,叶子节点存储主键id,非叶子节点不存储任何数据。
- 主键索引B+Tree存储结构:
- 非主键索引B+Tree存储结构:
看这两张截图,再去理解一下上面的话就容易的多了。
- 主键索引B+Tree存储结构:
MyISAM引擎
- 不支持事务、外键和行级锁。
- 搜索可能在非叶子节点结束,叶结点包含索引字段值及指向数据页数据行的逻辑指针:
聚簇索引与非聚簇索引
- 区别:唯一的区别在于叶子节点是否存储整行数据;
聚簇索引(聚集索引)
- 插入速度严重依赖于插入顺序,按照主键自增的方法插入,是InnoDB引擎中最快的方式;
- 如果没有定义主键,InnoDB会选择一个唯一的非空索引代替;
- 如果没有这样的索引,InnoDB会隐式定义一个主键来作为局促索引;
- 插入操作会比较慢,因为会设计到B+Tree自平衡的操作;
- 叶子节点的数据会和节点的数据重叠;
非聚簇索引(非聚集索引)
- 因为一个表中只能有一个聚簇索引,所以非聚簇索引也被称为二级索引,底层叶子节点存储的是主键id;
- 叶子节点的数据不会和节点的数据重叠;
- 通常使用非聚簇索引查询会涉及到回表查询,使用覆盖索引可避免;
联合索引(复合索引)
- 使用联合索引应遵守最左匹配原则,如联合索引
(a,b,c)
,查询时应使用abc
、ab
或a
,才会生效,必须要保证从左到右的顺序,bc
这种是无效的;
跳跃索引
- 还是上面的例子,联合索引
(a,b,c)
,当使用索引 a、c进行查询时,是可以生效的,虽然中间跳过了索引b,但查询条件能够包含联合索引的最左边的字段,MySQL就可以利用这部分索引来减少扫描范围,从而提高查询效率。这种方式并没有违反最左匹配原则,而是对其的一种补充和优化。
唯一索引
- 唯一索引是单个或多个字段的组合,这些组合字段不可重复,创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复;
索引排序
使用order by
排序时应使用索引字段排序,否则会使用文件排序;
更多推荐
已为社区贡献1条内容
所有评论(0)