mysql如何实现高效分页

问题就在这里,如果是limit 100000,20000,需要扫描120000行,在一个高并发的应用里,每次查询需要扫描超过100000行,性能肯定大打折扣。在《efficient pagination using mysql》中提出的clue方式。利用clue方法,给翻页提供一些线索,比如还是 SELECT * FROM `csdn` order by id desc,按id降序分页,每页...
mysql如何实现高效分页
先看一下分页的基本原理(我拿的是CSDN那个百万级数据库来测试!):

SELECT * FROM `csdn` ORDER BY id DESC LIMIT 100000,2000;

耗时: 0.813ms分析:对上面的mysql语句说明:

limit 100000,2000的意思扫描满足条件的102000行,扔掉前面的100000行,返回最后的2000行。问题就在这里,如果是limit 100000,20000,需要扫描120000行,在一个高并发的应用里,每次查询需要扫描超过100000行,性能肯定大打折扣。在《efficient pagination using mysql》中提出的clue方式。利用clue方法,给翻页提供一些线索,比如还是
SELECT * FROM `csdn` order by id desc,

按id降序分页,每页2000条,当前是第50页,当前页条目id最大的是102000,最小的是100000。如果我们只提供上一页、下一页这样的跳转(不提供到第N页的跳转)。那么在处理上一页的时候SQL语句可以是:
SELECT * FROM `csdn` WHERE id<=102000 ORDER BY id DESC LIMIT 2000;
#上一页
耗时:0.015ms处理下一页的时候SQL语句可以是:
耗时:0.015ms这样,不管翻多少页,每次查询只扫描20行。效率大大提高了!但是,这样分页的缺点是只能提供上一页、下一页的链接形式。2014-04-24
mengvlog 阅读 8 次 更新于 2025-07-20 20:38:48 我来答关注问题0
  •  翡希信息咨询 面试官问:MySQL中百万级数据量,如何分页查询?

    在MySQL中处理百万级数据量的分页查询时,可以采取以下几种策略来提高查询效率:利用LIMIT功能:直接使用SQL语句中的LIMIT子句进行分页,例如SELECT * FROM table_name LIMIT 10 OFFSET 990来查询第100页的前10条记录。但随着页码增大,OFFSET的值也会增大,导致查询效率降低。建立主键或唯一索引:结合LIMIT...

  •  翡希信息咨询 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题

    提升MySQL深分页查询效率10倍的三种优化方案如下:引入子查询:方案描述:先通过子查询筛选出符合条件的主键ID,再基于这些ID进行后续查询。优化效果:利用覆盖索引,避免回表操作,性能提升可达3倍。应用场景:适用于需要深分页查询且对性能有较高要求的场景。使用INNER JOIN关联查询:方案描述:将子查询结果...

  •  翡希信息咨询 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题

    提升MySQL深分页查询效率的三种优化方案如下:使用子查询嵌套:方案描述:先通过子查询找出符合条件的主键,然后用这些主键进行精确查询,从而避免了回表查询。效果:可以将查询执行时间显著缩短,提升查询性能3倍或更多。内连接关联查询:方案描述:将子查询的结果与原表进行内连接关联,同样可以避免回表查询,...

  •  翡希信息咨询 面试官:Mysql千万级大表如何进行深度分页优化

    针对Mysql千万级大表的深度分页优化,可以采取以下几种策略:使用子查询优化:原理:通过子查询先获取到需要分页数据的create_time等唯一标识,再根据这个唯一标识回表获取实际数据,从而减少回表数据量。优点:能够显著降低深度分页时的查询时间。缺点:子查询本身也会消耗一定的资源。利用INNER JOIN优化:原理...

  •  翡希信息咨询 MySQL深分页问题原理与三种解决方案

    方案一:从业务形态角度优化 限制查询页数:借鉴搜索引擎的做法,对分页查询的范围进行限制。因为页数越大,内容的相关性通常越低,对业务的实际价值也不高。通过限制分页查询的范围,可以有效避免深分页带来的性能问题。方案二:通过优化SQL语句提高查询效率 查看执行计划:使用EXPLAIN语句查看SQL查询的执行计划...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部