mysql: MySQL索引和排序相关名词概念汇总

注意,这些名词并非并列关系,本文仅作概念总结

1 MySQL 索引相关名词

1.1 索引类型与存储关系

名词 概念定义
主键索引、聚簇索引 主键索引是基于表中主键字段创建的索引,用于唯一标识每一行数据。主键索引的主要作用是确保数据的唯一性。 聚簇索引是用来存储表中行数据的特殊索引。在 InnoDB 中,表的行数据实际上存储在聚簇索引中,因此它决定了数据的物理存储顺序。通常情况下,聚簇索引等同于主键索引,但这并非绝对。 如果表中定义了主键,聚簇索引会与主键索引一致。如果没有主键,InnoDB 会选择第一个唯一且非空的索引作为聚簇索引。如果连这样的索引都没有,InnoDB 会自动生成一个隐藏的聚簇索引(名为 GEN_CLUST_INDEX)。 主键索引是逻辑上的唯一性约束,而聚簇索引是物理上的数据存储方式。两者在大多数情况下是相同的,但在没有主键的表中,聚簇索引可能会与主键索引不同。
二级索引(辅助索引) 二级索引是除聚簇索引之外的索引类型,其叶子节点存储索引列值与对应的主键值,而不存储完整行数据。通过二级索引定位记录后,若查询字段不完全包含在索引中,MySQL 需要根据主键值再次访问聚簇索引以获取完整行数据。
覆盖索引 覆盖索引是指一个查询所需的所有列都包含在同一个索引中,查询过程中 MySQL 只需访问索引结构即可返回结果,无需回到聚簇索引中读取完整行数据,从而减少随机 IO 并提升查询性能。
联合索引(组合索引、多列索引) 联合索引是由多个列组成的索引,其内部按索引定义时的列顺序进行排序。MySQL 在执行查询或排序时,会按照索引列的顺序逐层利用索引结构,以缩小扫描范围或直接完成有序输出。
唯一索引、普通索引 唯一索引在逻辑上要求索引列值在表中唯一,MySQL 在写入数据时会进行唯一性校验;普通索引不限制列值重复,仅用于提升查询效率。两者在查询阶段的访问方式一致。
全文索引 全文索引用于对文本字段进行关键词检索,底层采用倒排索引结构,主要服务于 MATCH AGAINST 查询,不参与常规等值查询、范围查询和 ORDER BY 排序过程。
Hash索引 Hash索引通过哈希函数直接定位记录位置,仅支持等值查询,不支持范围扫描和排序。在 MySQL 中主要由 Memory 引擎提供,InnoDB 不使用该索引结构作为通用索引。

2 MySQL 查询相关名词

2.1 查询访问路径

名词(同类合并) 概念定义
主键查询 主键查询是指通过主键索引进行的等值查询。由于主键索引对应聚簇索引结构,MySQL 可以一次索引访问直接定位到完整数据行,查询路径最短,性能最优。
二级索引查询 二级索引查询是指通过辅助索引定位记录的查询方式。当查询字段未被索引完全覆盖时,MySQL 需要根据索引中的主键值再次访问聚簇索引以获取完整行数据。
覆盖索引查询 覆盖索引查询是指查询过程中所需字段全部来自索引结构,MySQL 在执行时无需回表即可返回结果,能够显著降低 IO 成本。
范围查询、等值查询 等值查询使用 = 或 IN 条件在索引中快速定位记录;范围查询使用 >、<、BETWEEN 等条件在 B+Tree 索引中进行顺序扫描。
全表扫描查询 全表扫描查询是指 MySQL 不使用任何二级索引,而是顺序扫描聚簇索引中的全部记录以筛选结果,通常发生在无可用索引或索引失效的场景下。

3 MySQL 排序相关名词

3.1 排序方式与实现

名词(同类合并) 概念定义
索引排序 vs 文件排序 索引排序是指 MySQL 利用索引本身的有序性直接返回有序结果,而无需额外排序操作。只有当 ORDER BY 列的顺序和方向与索引完全一致时,该排序方式才能生效。 文件排序是 MySQL 在无法使用索引完成排序时采用的排序实现方式名称。该排序可能在内存中完成,也可能借助磁盘临时文件完成,其本质是 MySQL 自行实现的一套排序流程v
内存排序 vs 磁盘排序 当排序数据量未超过 sort_buffer_size 时,MySQL 在内存中完成排序;当数据量超出内存限制时,MySQL 会借助磁盘临时文件进行多路归并排序。
单路排序 vs 双路排序 文件排序 分为单路排序双路排序 单路排序在排序阶段同时保存排序键和所需字段,排序完成后直接返回结果; 双路排序在首次排序时仅保存排序键和行标识,排序完成后再访问聚簇索引获取完整行数据。
全量排序、Top-N排序 全量排序对所有满足条件的记录进行排序; Top-N排序在 ORDER BY 与 LIMIT 同时存在时,仅维护排序结果中前 N 条记录,从而减少排序成本。

图,来自面试鸭

3.2 排序与分页

名词(同类合并) 概念定义
普通分页查询 vs 深分页查询 普通分页查询使用 LIMIT OFFSET 且 OFFSET 较小; 深分页查询中 OFFSET 值很大,MySQL 仍需扫描并丢弃 OFFSET 行记录,导致查询性能随着页码增加而明显下降。
相关推荐
6极地诈唬2 小时前
【PG漫步】DELETE不会改变本地文件的大小,VACUUM也不会
linux·服务器·数据库
MZWeiei3 小时前
Redis持久化机制中的 AOF机制简单介绍
数据库·redis
Elastic 中国社区官方博客3 小时前
Elasticsearch:在 X-mas 吃一些更健康的东西
android·大数据·数据库·人工智能·elasticsearch·搜索引擎·全文检索
酷柚易汛3 小时前
酷柚易汛ERP 2025-12-26系统升级日志
java·前端·数据库·php
wang6021252184 小时前
阿里云存储的一些简要概述
数据库·阿里云·fastapi
小徐Chao努力5 小时前
【Langchain4j-Java AI开发】08-向量嵌入与向量数据库
java·数据库·人工智能
TG:@yunlaoda360 云老大5 小时前
华为云国际站代理商GSL主要有什么作用呢?
网络·数据库·华为云
TG:@yunlaoda360 云老大5 小时前
华为云国际站代理商GSL的流量用量与资费合规是如何实现的?
网络·数据库·华为云
冰冰菜的扣jio5 小时前
MySQL三大重要日志详解
数据库·mysql