索引结构和设计原则

索引是在MySQL的存储引擎层中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型。

MySQL提供了4中索引

BTREE索引:最常见的索引类型,大部分索引都支持B树索引

HASH索引:只有Memory引擎支持,使用场景简单

R-tree(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少

Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引,InnoDB从MySQL5.6开始支持全文索引

MyISAM、InnoDB、Memory三种存储引擎对各种类型索引的支持

索引         InnoDB引擎 MyISAM引擎 Memory引擎
BTREE索引 支持 支持 支持
HASH索引 不支持 不支持 支持
R-tree索引 不支持 支持 不支持
Full-text 5.6版本后支持 支持 不支持

我们常说的索引如果没有特别指明都是值B+树(多路搜索树,不一定是二叉的)结构组织的索引

其中聚集索引,复合索引,唯一索引默认都是使用B+tree索引,统称为索引

索引设计原则

索引的设计可以遵循一些已有的原则,创建索引的时候需尽量考虑符合这些原则便于提升索引的使用效率,更高效的使用索引

对查询效率偏高,且数据量比较大的表建立索引

索引字段的选择最佳候选列应当从where子句的条件中提取,如果where子句中的组合偏多那么应当挑选最常用的、过滤效果最好的组合

使用唯一索引,区分度越高,使用索引的效率就越高

索引可以有效的提升查询数据的效率,但索引数量不是越多越好,维护索引的代价自然也机会提高,对于插入、更新、删除等DML操作比较频繁的表来说,索引过多会引入很高的维护代价,降低DML操作的效率,增加相应操作时间的消耗,另外索引过多的话MySQL也会选择困难,虽然最终仍会找到一个可用的索引,但却提高了选择的代价。

使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的IO效率也可以提升总体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效的提升MySQL访问索引的IO效率

利用最左前缀,N个列组合而成的组合索引,那么相当于是创建了N个索引,如果查询时where子句中使用了组成该索引的前几个字段,那么这条查询SQL可以利用组合索引来提高效率

おすすめ

転載: blog.csdn.net/m0_46357303/article/details/121446102