• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • mysql大量数据分页查询优化-延迟关联

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2022年02月21日 0:06:03
  • 所属分类:Mysql优化, PHP+MySql
  • 阅读次数:1262次阅读
  • 标签:
  • 所有的php初学者都应该知道,mysql的分页语句写法如下:

    1
    select from a limit (page-1)*page_size,page_size

    而当这语句分页到一定程度时,例如1000页,每页20条

    1
    select from a limit 19980,20

    会发现分页之后查询的会越来越慢


    原因是因为limit a,b 的取数据方式是,先取出a+b条数据,再把a条筛选掉,剩b条,相当于一次性要取a+b条的数据,而a条其实是无用的


    解决方案如下


    一:php代码解决

    例如我们先查询出第一页的数据:

    1
    select from a limit 20

    保留最后一个的id,当需要取第2页数据时,则

    1
    select from where id>最后一个的id limit 20

    这样数据库就会每次都能走索引,然后只查出20条

    缺点:不能从第一页跳转到第n页

    缺点解决方案:前100页,不做优化,当到101页时采用该优化方案,并且不让用户从101页进行页面跳转到1xx页


    二:mysql解决

    1
    2
    3
    4
    5
    6
    7
    SELECT *
            FROM a
            inner join
            select id 
            from a
            LIMIT 19980, 20 
        as lim using(id);

    使用该方法,会先从索引表取出索引id,然后进行using索引覆盖方法,因为先查询的是索引,然后才从索引里关联取出20条记录,大大的提升了查询速度

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!