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

MySQL开启log_queries_not_using_indexes后,查询含主键的countries表被记录的疑问

MySQL开启log_queries_not_using_indexes后,查询含主键的countries表被记录的疑问

嗨,我来帮你拆解这个问题,其实这是MySQL优化器的正常行为,不用太担心~

为什么明明有主键,查询却没走索引?

你看你的countries表只有63行数据,数据量极小。MySQL的优化器会对比“全表扫描”和“走索引”的成本:对于小表来说,全表扫描的IO开销反而比遍历聚簇索引(主键索引)更低,所以优化器主动选择了全表扫描(也就是EXPLAIN里的type=ALL,key=NULL),这完全是合理的优化决策,不是表结构或者查询的问题。

为什么这个查询会被log_queries_not_using_indexes记录?

这个日志的规则很直白:只要查询没有使用任何索引,就会被记录下来——不管你的表有没有定义索引。这里优化器选了全表扫描,确实没用到任何索引,所以符合记录条件,自然就出现在日志里了。

应该忽略还是处理?

这种情况完全可以忽略:

  • 当未来你的countries表数据量增长到一定规模(比如几千行以上),优化器会自动切换为使用主键索引,那时这个查询就不会被记录了。
  • 如果非要强制现在就走索引,可以给查询加FORCE INDEX(PRIMARY),比如:
    SELECT id, country AS country_name FROM countries FORCE INDEX(`PRIMARY`);
    
    但真的没必要,小表全表扫描的效率反而更高。

备注:内容来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:18:02