MySQL的存储引擎有哪些?它们之间有什么区别?MySQLInnoDB引擎中的聚簇索引和非聚簇索引有什么区别?M
- 游戏开发
- 2025-08-28 12:30:02

MySQL 的存储引擎有哪些?它们之间有什么区别?
先来回顾以下我们业务场景下一般的数据库访问的过程应用——>server层 ——>存储引擎层——>磁盘
官网描述:
InnoDB: MySQL 8.4 中的默认存储引擎。 InnoDB 是事务安全(符合 ACID) 存储引擎,具有 commit、rollback 和 崩溃恢复功能来保护用户数据。 InnoDB 行级锁定(无升级 到更粗粒度的锁)和 Oracle 样式一致 非锁定读取增加了多用户并发性,并且 性能。 InnoDB 将用户数据存储在 聚集索引,用于减少基于的常见查询的 I/O 主键。为了维护数据完整性, InnoDB 还支持 FOREIGN KEY 引用完整性约束。
MyISAM: 这些表占用空间小。 表级锁定 限制了读/写工作负载的性能,因此它通常是 用于 Web 和数据中的只读或只读工作负载 仓储配置。
Memory: 将所有数据存储在 RAM 中,以便在 需要快速查找非关键数据。这个引擎是以前称为 HEAP 发动机。它的用途案例正在减少; InnoDB 及其缓冲区 池内存区域提供了一种通用且持久的方式 将大部分或全部数据保留在内存中,以及 NDBCLUSTER 提供快速的键值查找 用于大型分布式数据集。
总结: 节选自面试鸭 作者:木子金又二丨
MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?同问方式
什么是聚集索引,什么是二级索引(非聚集索引) 什么是回表?
聚集索引的选取规则:
1.如果存在主键,主键就是一个聚集索引。
2.如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
3.如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。
总结:
聚簇索引(聚集索引):数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个。
非聚簇索引(二级索引):数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个。
回表查询:通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表
MySQL 的索引类型有哪些? 一、按 数据结构 分类 B+Tree 索引 特点:MySQL 默认的索引结构,支持范围查询和排序,适用于大部分场景。适用场景:=, >, <, BETWEEN, ORDER BY 等操作。支持引擎:InnoDB、MyISAM、Memory 等。 Hash 索引 特点:基于哈希表实现,仅支持精确匹配(等值查询),查询速度快,但不支持范围查询和排序。适用场景:等值查询(如 WHERE key = value)。支持引擎:Memory 引擎显式支持,InnoDB 支持自适应哈希索引(内部自动管理,用户无法手动创建)。 全文索引(Full-Text) 特点:针对文本内容分词检索,支持自然语言搜索和关键词匹配。适用场景:大文本字段(如 CHAR、VARCHAR、TEXT)的全文搜索。支持引擎:MyISAM 和 InnoDB(MySQL 5.6+)。 空间索引(R-Tree) 特点:用于地理空间数据类型(如 GEOMETRY、POINT、POLYGON),支持空间关系计算。适用场景:地理数据查询(如距离计算、区域覆盖)。支持引擎:MyISAM(早期)和 InnoDB(MySQL 5.7+)。 二、按 逻辑功能 分类 主键索引(Primary Key) 特点:唯一且非空,每个表只能有一个主键索引。数据结构:InnoDB 中主键索引是聚簇索引(数据与索引存储在一起)。 唯一索引(Unique Key) 特点:确保列值唯一,允许 NULL 值(但 NULL 可重复)。数据结构:B+Tree。 普通索引(Normal Index) 特点:最基本的索引,无唯一性约束,仅加速查询。数据结构:B+Tree。 组合索引(Composite Index) 特点:多个列组合成的索引,遵循 最左前缀原则。示例:索引 (a, b, c) 可支持 WHERE a=1、WHERE a=1 AND b=2,但不支持 WHERE b=2。 前缀索引(Prefix Index) 特点:对长文本字段的前 N 个字符建立索引,节省存储空间。语法:CREATE INDEX idx_name ON table (column(N))。 覆盖索引(Covering Index) 特点:查询的列全部包含在索引中,无需回表查询数据行。优化点:显著减少 I/O 操作,提升查询性能。 三、其他特殊索引 自适应哈希索引(Adaptive Hash Index) 特点:InnoDB 自动为频繁访问的索引页创建哈希索引,用户不可控。作用:加速等值查询。 倒排索引(Inverted Index) 特点:全文索引的底层实现,通过分词建立词条到文档的映射。 四、存储引擎对索引的支持 索引类型InnoDBMyISAMMemoryB+Tree✅✅✅Hash❌(仅自适应)❌✅全文索引(FULLTEXT)✅(5.6+)✅❌空间索引(R-Tree)✅(5.7+)✅❌ 五、选择索引的建议 高频查询字段:优先考虑使用索引。区分度高:选择区分度高的列(如用户ID)建立索引。避免冗余:合理设计组合索引,避免单列重复索引。更新代价:索引会降低写操作速度,需权衡读写比例。 查询字段**:优先考虑使用索引。区分度高:选择区分度高的列(如用户ID)建立索引。避免冗余:合理设计组合索引,避免单列重复索引。更新代价:索引会降低写操作速度,需权衡读写比例。MySQL的存储引擎有哪些?它们之间有什么区别?MySQLInnoDB引擎中的聚簇索引和非聚簇索引有什么区别?M由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MySQL的存储引擎有哪些?它们之间有什么区别?MySQLInnoDB引擎中的聚簇索引和非聚簇索引有什么区别?M”