问题:一个 100W 的表查询的时候只展示 10 条但是没有任何的筛选条件 explain 的时候发现扫描了 100W 条!!

相信很多人在工作经常会发生这种情况——查询一张表只展示10条记录但是表里面有100W条数据在没有任何的筛选索引的操作下 explain的时候发现扫描了100W条实际情况我只展示10条 该如何处理?

我这边的处理是选择 id > 0 这时候explain发现扫描的数量少了一半。
希望各路大神路过给点意见

Code_Er
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4

表默认的主键索引,只展示10条数据可以使用limit offset

3年前 评论
Code_Er (楼主) 3年前

1,没有用到索引当然全表扫描,解决方案就是建立索引。 2,分页的情况下,当页数越大时,使用limit offset性能开始下降, id >也是比较好的优化。 3,拆分 sql,改变查询思路,mysql5.6后连接mysql带来的时间消耗几乎可以忽略,多次查询有时比一次查询效率更高。

3年前 评论
Code_Er (楼主) 3年前

只100W数据而已, limit offset 即可,看explain的时间,如果很快无需优化

3年前 评论
Code_Er (楼主) 3年前
  1. 增加冷热数据,用时间去缩小全表扫的范围
  2. 如果ID无断续情况,可自己计算出一页的开始结束ID,能过id精准查出记录
  • 自己的猜想,不一定对 -_-!
3年前 评论
Code_Er (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!