一、索引概述
1.介绍
索引(index)是帮助 MySQL 高效获取数据的有序数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2.演示
如图,左图 未采用索引,需要逐步进行查找
右图 采用索引,使用了二叉排序树,查找3次即可找到
3.优缺点
优势 | 劣势 |
提高数据检索的效率,降低数据库的I0成本 | 索引列也是要占用空间的。 |
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。 | 索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低。 |
二、索引结构
在讲解存储引擎的MySQL体系结构时,我们发现索引是在引擎层实现的。
不同的存储引擎有不同的结构,主要包括以下几种:
索引结构 | 描述 |
B+Tree索引 | 最常见的索引类型,大部分引擎都支持 B+ 树索引 |
Hash索引 | 底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询 |
R-tree(空间索引) | 空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少 |
Full-text(全文索引) | 是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES |
索引结构 | InnoDB | MyISAM | Memory |
B+Tree索引 | 支持 | 支持 | 支持 |
Hash索引 | 不支持 | 不支持 | 支持 |
R-tree(空间索引) | 不支持 | 支持 | 不支持 |
Full-text(全文索引) | 5.6版本之后支持 | 支持 | 不支持 |
我们平常说的索引,如果没有特别说明,都是指 B+ 树结构组织的索引。
接下来我将着重介绍 B+Tree 索引以及 Hash 索引,欢迎大家持续关注我的文章。
还没有评论,来说两句吧...