抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前置

  1. InnoDB 存储引擎的每次磁盘IO操作读取或写入的大小是一页(16KB)
  2. B+树索引结构下的每个节点大小就是一页
  3. 树的高度 == 每次查询数据时磁盘IO的次数

总结

IO操作的耗时远高于CPU计算,而且数据库的大部分数据都存储在磁盘上,因此数据库设计的核心目标之一就是:减少IO次数
MySQL 中的索引是提升查询性能的核心机制,本质上是一种高效查找的数据结构。在 InnoDB 引擎中,索引底层主要采用 B+ 树 实现。

首先,InnoDB 的表必须有一个聚集索引(Clustered Index),通常是主键。它的特点是:数据行和索引存储在一起,叶子节点直接保存完整的用户数据。因此,通过主键查询只需要一次 I/O,效率最高。

除此之外的索引都叫二级索引(Secondary Index),也称为非聚簇索引。它的叶子节点不存完整数据,而是存储主键值。当执行非主键查询时,MySQL 先通过二级索引找到主键,再回表到聚集索引中获取完整数据——这个过程叫回表查询,会带来额外开销。

为了优化回表,我们可以设计覆盖索引,即让查询所需的所有字段都包含在索引中,这样就无需回表了。比如 SELECT id, name FROM users WHERE name = 'Tom',如果 (name, id) 有联合索引,就能直接返回结果。

评论