Mysql 的 limit 分页很大时的查询

explain select id from ad_visit_201811 where turn=1 order by id asc limit 5000000,1000

这个sql语句扫描了 5001000 行,turn 上没有索引,优化后的 SQL 语句:

explain select a.id,a.gid from (select id from ad_visit_201811  order by id asc limit 5000000,1000) b, ad_visit_201811 a where a.id=b.id

再到业务代码根据 turn 做筛选。

总结

对于数据量很大的表,应该先做一个子查询查出 id (只会在索引中扫描),然后再做关联查询,这样扫描的行数是限定的,不会扫描表前面的所有行,大大提高查询效率。

Larwas
请先登录后发表评论
  • 最新评论
  • 总共0条评论