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

索引使用判断:指定测试环境下哪个查询会用dept_deptname_idx索引?

索引使用判断分析

先给明确结论:第一个查询(SELECT deptid from dept where deptname ='SAPA';)会使用dept_deptname_idx索引,第二个查询大概率不会使用该索引。

下面结合测试环境的特点拆解具体原因:

  • 先明确测试环境的核心数据:dept表共1000行,deptname有10个均匀分布的唯一值,意味着每个deptname对应100行数据,占总行数的10%。

第一个查询的索引使用逻辑

对于SELECT deptid from dept where deptname ='SAPA';:

  • 这个查询仅需匹配100行数据,占比仅10%。数据库优化器会判断:通过dept_deptname_idx索引可以快速定位到所有符合条件的条目,效率远高于全表扫描。
  • 如果你用的是InnoDB引擎,二级索引(比如这里的dept_deptname_idx)会自动包含主键列(假设deptid是主键),所以这个查询属于覆盖索引查询——直接从索引里就能拿到需要的deptid,连回表操作都省了,优化器必然优先选择走索引。

第二个查询的索引放弃逻辑

对于SELECT deptid from dept where deptname <>'SAPA';:

  • 这个查询需要返回900行,占总行数的90%。此时优化器会核算成本:如果走索引,需要遍历索引中除了'SAPA'之外的90%条目,哪怕是覆盖索引,遍历这么大比例的索引条目,开销和全表扫描差不多甚至更高。
  • 全表扫描可以一次性读取连续的数据页,反而比反复从索引跳转到数据页(非覆盖索引场景)更高效。所以优化器通常会放弃索引,选择全表扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:16:10