MySQL EXPLAIN中单行表查询type为何为const而非system?
单行InnoDB表主键查询EXPLAIN结果为const而非system的原因
你遇到的这个现象是存储引擎特性和system类型触发规则共同作用的结果,具体原因如下:
system类型的触发存在隐含限制:官方文档中提到的「表仅有一行数据时命中system类型」的规则,仅适用于两类表:一是MySQL内置的系统表,二是使用MyISAM、MEMORY等非事务型存储引擎的用户表。非事务引擎会精确存储表的总行数,优化器可以确认表行数固定为1时,才会返回system类型。- InnoDB引擎不支持
system类型判定:你测试使用的test_system表采用InnoDB存储引擎,InnoDB的表行数为动态估算值,即使当前表仅存1行数据,优化器也不会判定该表行数会永久固定为1,因此不会触发system类型,只会按照主键等值查询的规则判定为const类型。
如果你想要验证规则,可以执行以下语句将表修改为MyISAM引擎:
ALTER TABLE test_system ENGINE = MYISAM;
修改完成后再次执行相同的EXPLAIN查询,就可以看到type字段变为system。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

