SQL查询回表次数需通过执行计划推断:使用二级索引查非索引列时,每匹配一行就回表一次,rows值近似回表次数;覆盖索引(Extra显示Using index)则回表次数为0。

SQL查询的回表次数,不能直接从执行计划里看到一个叫“回表次数”的数字,而是要通过分析执行计划中的访问路径、索引类型和输出列来推断。核心判断依据是:当使用二级索引(非聚簇索引)查数据,但查询语句需要返回非索引列时,MySQL/Oracle等数据库会根据索引中存储的主键值,再回到主键索引(聚簇索引)查找完整行记录——这个过程就叫“回表”,每次这样的跳转算一次回表。
看Extra列是否出现"Using index condition"或"Using where; Using index"
在MySQL的EXPLAIN结果中:
- "Using index":说明走了覆盖索引,所有需要的列都在该索引里,不回表;
- "Using index condition":用了ICP(索引下推),虽然用到了索引过滤,但如果SELECT的字段不在索引中,仍需回表;
- 没出现"Using index",且type是"ref"/"range"/"index"等,但key显示用了某个二级索引,而SELECT包含该索引未包含的列 → 大概率每匹配一行就回表一次。
看Key列和Select Type配合判断回表触发条件
例如执行:SELECT id, name, email FROM users WHERE status=1;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~