一个 mysql 范围查询的优化问题,求高人解答?

mysql 5.7 innodb
有个user表38w数据
三个语句执行计划分别是
explain SELECT * from user_basic_0000 WHERE id > 257300 and id <= 257800 ;
image.png
explain SELECT * from user_basic_0000 WHERE id > 257300 order by id asc limit 500;
image.png
explain SELECT * from user_basic_0000 WHERE id > 257300 limit 500;
image.png

为什么第一个预估的扫描行数这么少?
按我理解都是二分找到小于257300这个id的最近索引然后再往后遍历。
求高手解答

阅读 2.1k
1 个回答

//浅浅尝试一下,若存在不足请指正
//字段优化 ,需要啥字段就查询哪些字段
// 小表驱动大表
SELECT * from user_basic_0000 WHERE id > 257300 and id <= 257800 ;
优化为
select from (SELECT from user_basic_0000 WHERE id > 257300) tb where tb.id<= 257800;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题