You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0执行SELECT id查询时为何使用主键之外的其他索引

底层原因如下:

  1. InnoDB 索引结构差异
    InnoDB的主键索引是聚簇索引,叶子节点存储完整的行记录,单个数据页可容纳的记录数量有限。而你创建的二级唯一索引idx_number的B+树叶子节点仅存储索引列number和主键值id,没有其他冗余字段,单个数据页能存储的记录数远多于聚簇索引。

  2. 覆盖索引命中
    你的查询语句SELECT id FROM test仅需要返回主键id的值,idx_number的叶子节点已经包含了查询需要的全部字段,不需要回表查询聚簇索引获取额外数据,完全可以满足查询需求,属于覆盖索引场景。

  3. 优化器成本选择逻辑
    MySQL优化器会自动计算不同执行路径的IO成本:全量扫描二级索引需要读取的数据页数量更少,整体IO成本远低于扫描聚簇索引,因此优化器会优先选择成本更低的二级索引执行查询。


内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:06:01