专栏首页性能与架构mysql 大数据量的分页优化

mysql 大数据量的分页优化

使用limit进行分页,翻到10000多页后效率低

原因

limit offset 会逐行查找,是先查询再跳过

优化思路

(1)从业务逻辑

不允许翻过100页,例如百度一般可以翻到70页左右

(2)技术上

select * from table limit 5000000,10 时就很慢了,大概需要4秒多

优化方法(1)

select * from table where id>5000000 limit 10;

这样就非常快,0.02s左右,因为使用了id索引

但这样用有前提,id是连续的,中间的数据不能删,否则id为5000000的并不是第5000000个记录

优化方法(2)

如果必须用limit offset查询,就用延迟关联

select id from table limit 5000000,10

这样只查询id列,实现了索引覆盖,就会很快

select t.* from table t inner join (select id from table limit 5000000,10) as tmp on t.id=tmp.id;

通过内连接再获取分页后每条记录的详细信息

本文分享自微信公众号 - 性能与架构(yogoup)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 简化 SQL 递归查询

    自引用类型的表结构处理起来比较麻烦,比如“分类”表,通常包括自己的ID和父分类ID,当我们要做父分类路径、子分类路径之类的查询时很不方便,例如我们会使用嵌套查询...

    dys
  • Express.js 4,Node.js,MongoDB REST API 简易教程

    教程内容 采用测试驱动开发的方式,开发一个简单的 REST API,包括基本的 POST/GET/PUT/DELETE 操作 先编写好针对各个接口的测试代码,包...

    dys
  • mysql分布式前端代理 - Amoeba最简配置案例

    image.png 主要配置文件说明 1)amoeba.xml 定义客户端如何连接amoeba等基础信息 2)dbServers.xml Amoeba作为数据...

    dys
  • Docker Compose 1.18.0 之服务编排详解

    一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过serv...

    搜云库
  • Docker Compose 1.18.0 之服务编排详解

    一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过serv...

    搜云库
  • 「小程序JAVA实战」小程序的基础组件(24)

    IT故事会
  • mybatis(#和$的区别)

    1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入...

    gfu
  • MySQL排它锁之行锁、间隙锁、后码锁

    默认情况下,InnoDB工作在可重复读隔离级别下,并且会以Next-Key Lock的方式对数据行进行加锁,这样可以有效防止幻读的发生。Next-Key Loc...

    IT大咖说
  • SQL学习笔记之SQL查询练习1

    –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Co...

    Jetpropelledsnake21
  • VirtualBox的各种网络模式要如何选择?

    一直在使用virtualbox,感觉挺好用的,平时也没怎么遇到过问题,所以也没有详细看过virtualbox的官方文档。

    wangyuntao

扫码关注云+社区

领取腾讯云代金券