对于MySQL 等关系型数据库中的索引,从不同的维度对索引分类,得到不同的名称:
按照算法分类
B tree索引、hash索引、R tree索引、Full text 索引
按照字段约束分类
主键索引、唯一索引、普通索引、简单索引、组合索引
按照索引字段是否排序分类
聚簇索引、非聚簇索引
聚簇索引按照索引量分类
稠密索引、稀疏索引
一、算法分类
1.1、B Tree索引的性能分析
B Tree索引分类B-Tree和B+Tree两种索引。
B-Tree索引的每个节点包含了‘键值’和‘键值对于的数据对象存放地址指针’,所以成功搜索一个对象可以不用到达树的叶节点。
B+Tree只在叶子节点中存储数据。
1.2、Hash索引
基于哈希表实现,特别适用于精确匹配索引中的列。只有memory存储引擎支持。
1.3、R-Tree索引(空间索引)
用于对地理空间数据建立索引,只有MyISAM支持。
1.4、Full-text (全文索引)
也是MyISAM的一种特殊索引类型,InnoDB从MYSQL5.6版本提供对全文索引的支持。
二、字段约束分类
2.1、唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。
2.2、主键索引
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
2.3、聚集索引
数据是否与索引存储在一起
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
三、索引数据特征
3.1、聚簇索引
索引中索引项的排序方式和表中数据记录排序方式一致的索引;如自增长的ID主键。
3.2、非聚簇索引
索引中索引项与物理存储顺序不同
四、聚簇索引按照索引的数据量分类
聚簇索引类型按照数据量的分布分为:稠密索引和稀疏索引。
4.1、稠密索引
1、表中的索引列是按照顺序排列的
2、索引按照此列建立聚簇索引
3、索引项和表中的数据一一对应
索引中的数据结构中只存放‘记录的键’以及‘指向记录本身的指针’;指针就是一个指向记录或存储块地址。
我们假定查找键和指针所占存储空间远小于记录本身,我们就可以认为存储索引文件比存储数据文件所需存储块要少得多。
当内存容纳不下数据文件,但能容纳下索引文件时,索引的优势尤为明显。
这时,通过使用索引文件,我们每次查询只用一次I/O操作就能找到给定键值的记录。
4.2、稀疏索引
1、表中的索引列是按照顺序排列的
2、索引按照此列建立聚簇索引
3、索引项只对应表中的部分数据;如:一个存储数据块一条
稀疏索引只为数据文件的每个存储块设一个键-指针对,它比稠密索引节省了更多的存储空间,但查找给定值的记录需更多的时间。