文章目录
- 单列索引与复合索引?
- 单列索引
- 主键索引(Primary Key Index)
- 唯一索引(Unique Index)
- 普通索引(Regular Index 或 Non-unique Index)
- 全文索引(Full-text Index)
- 复合索引
- 聚集索引(聚簇索引)&二级索引?
- 本篇小结
更多相关内容可查看
单列索引与复合索引?
单列索引
在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、普通索引、全文索引。
主键索引(Primary Key Index)
- 主键索引是数据库表中的一个特殊索引,它包含一个唯一的标识符(或称为键),用于唯一地标识表中的每一行。
- 主键索引不允许有空值(NULL),并且表中的每一行都必须具有一个主键值
- 由于主键索引的唯一性和非空性,数据库系统可以快速地通过主键来检索数据。
- 大多数数据库系统都会自动为主键创建一个唯一索引,以加速查询性能。
唯一索引(Unique Index)
- 唯一索引确保索引列中的每个值都是唯一的。但是,与主键索引不同,唯一索引允许有空值(除非列被定义为NOT NULL)。
- 一个表可以有多个唯一索引,但只能有一个主键索引。
- 使用唯一索引可以确保数据的唯一性,并且可以通过该索引快速地检索数据。
普通索引(Regular Index 或 Non-unique Index)
- 普通索引是最常见的索引类型,它仅仅是为了提高查询性能而创建的。
- 普通索引允许在索引列中存在重复的值和空值。
- 与主键索引和唯一索引相比,普通索引的创建和维护成本通常较低。
- 在选择使用哪种索引时,需要根据具体的查询需求和性能考虑来权衡。
全文索引(Full-text Index)
- 全文索引是一种特殊类型的索引,用于在文本字段(如VARCHAR、TEXT等)上执行全文搜索。
- 全文索引可以针对表中的一个或多个列创建,并允许用户根据文本内容(如单词、短语等)来检索数据。
- 全文索引通常使用倒排索引技术来实现,该技术将文本内容分解为单词或短语,并将它们与包含这些单词或短语的文档相关联。
- 全文索引在需要执行复杂的文本搜索查询时非常有用,例如在搜索引擎或内容管理系统中。
复合索引
在MYSQL多列上创建的索引, 就是一个复合索引(组合索引)
设计复合索引的一个重要原则是能用窄索引不用宽索引,因为窄索引(索引列为1-2列的索引)往往比宽索引(索引列超过2列的索引)更有效。同时,创建和维护索引也需要消耗一定的时间和存储空间,因此在使用复合索引时,需要根据实际的需求和数据的特点来选择合适的索引列和索引类型。
聚集索引(聚簇索引)&二级索引?
而在在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:
聚集索引选取规则:
- 如果存在主键,主键索引就是聚集索引。
- 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
- 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引
聚集索引和二级索引的具体结构如下:
- 聚集索引的叶子节点下挂的是这一行的数据 。
- 二级索引的叶子节点下挂的是该字段值对应的主键值。
接下来,我们来分析一下,当我们执行如下的SQL语句时,具体的查找过程是什么样子的。
具体过程如下:
- 由于是根据name字段进行查询,所以先根据name='Arm’到name字段的二级索引中进行匹配查找。但是在二级索引中只能查找到 Arm 对应的主键值 10。
- 由于查询返回的数据是*,所以此时,还需要根据主键值10,到聚集索引中查找10对应的记录,最终找到10对应的行row。
- 最终拿到这一行的数据,直接返回即可
回表查询: 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。
本篇小结
有小伙伴对其他数据库内容感兴趣,可以通过以下链接进行查看
数据库-索引(基础篇)
数据库-索引结构(B-Tree,B+Tree,Hash,二叉树)
数据库-索引语法(增删查)
数据库-索引分类(主键索引、唯一索引、普通索引、全文索引)
数据库-索引使用(验证索引效率、单列索引与联合索引、最左前缀法则)
索引失效情况
还没有评论,来说两句吧...