索引分类--01
文章目录
- 存储引擎索引的结构
- 从应用角度上分类
- 3.从数据的物理顺序与键值的逻辑(索引)顺序关系分类
- 补充点,覆盖索引
1. 存储引擎索引的结构
在MySQL中,索引是在存储引擎层实现的,而不是在服务器层。MySQL支持的索引方法,也可以说成是索引的类型(这是广义层面上的),主要有以下几种:在MySQL中,索引是在存储引擎层实现的,而不是在服务器层。MySQL支持的索引方法,也可以说成是索引的类型(这是广义层面上的),主要有以下几种:
存储引擎结构 | 概念 |
---|---|
B -Tree | 最常见的索引储存结构,大部分引擎都支持B树引擎 |
B +Tree | Mysql使用索引储存结构,是B-Tree树的加强版 |
HASH | 只有Memory引擎支持,使用场景简单,适用key-value查询,不适用在范围查询如>,<,>=,<= |
R_Tree | 空间索引,是MyISAM的一个特殊索引类型,主要用于地理空间数据类型,使用较少 |
2. 从应用角度上分类
索引 | 概念 |
---|---|
普通索引 | 也叫普通索引(index或key),它可以常规地提高查询效率。一张数据表中可以有多个常规索引。常规索引是使用最普遍的索引类型,如果没有明确指明索引的类型,我们所说的索引都是指常规索 |
唯一索引 | 唯一索引(Unique Key),可以提高查询效率,并提供唯一性约束。一张表中可以有多个唯一索引。允许为空值 |
主键索引 | 主键索引(Primary Key),也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键;被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号)主键的数据类型最好是数值。 |
复合索引 | 复合索引 : 即一个索引包含多个列,如果索引包含多个列,一般会将其称作复合索引,此时,列的顺序就十分重要,因为MySQL只能高效的使用索引的最左前缀列。创建一个包含两个列的索引,和创建两个只包含一列的索引是大不相同的。 |
全文索引 | 全文索引(Full Text),可以提高全文搜索的查询效 |
外键索引 | 外键索引(Foreign Key),简称外键,它可以提高查询效率,外键会自动和对应的其他表的主键关联外键的主要作用是保证记录的一致性和完整性 |
注意:只有InnoDB存储引擎的表才支持外键。外键字段如果没有指定索引名称,会自动生成。如果要删除父表(如分类表)中的记录,必须先删除子表(带外键的表,如文章表)中的相应记录,否则会出错。 创建表的时候,可以给字段设置外键,如 foreign key(cate_id) references cms_cate(id)
由于外键的效率并不是很好,因此并不推荐使用外键,使用逻辑是完成。但我们要使用外键的思想来保证数据的一致性和完整性。
3.从数据的物理顺序与键值的逻辑(索引)顺序关系分类
索引 | 概念 |
---|---|
聚簇索引 | InnoDB的聚簇索引其实就是在同一个结构中保存了B+Tree索引和数据行。 |
非聚簇索引 | 不是聚簇索引,就是非聚簇索引,也是二级索引,叶节点保存着聚簇索引信息 |
优点:可以把相关的数据保存在一起。数据访问更快。聚簇索引将索引和数据保存在同一个B+Tree中,因此,从聚簇索引中获取数据通常比非聚簇索引要快。使用覆盖索引扫描的查询可以直接使用节点页中的主键值。
补充点,覆盖索引
如果一个索引包含(或者覆盖)了所有需要查询的字段(列)的值,我们称之为“覆盖索引”。就是在B+Tree的磁盘块(节点)中能够查询得到信息,而不用查询到聚簇索引的叶节点就可以拿到信息,并且直接返回,这也是为什么我们经常倡导的少使用“select * ” 的原因。
还没有评论,来说两句吧...