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 阅读 217 次 更新于 2025-09-09 10:50:15 我来答关注问题0
  •  深空见闻 mysql大数据量分页查询慢,如何优化,主键是联合主键

    可以通过其他方式,如利用子查询或连接结合索引快速定位元组的位置,然后再读取元组,从而避免全表扫描。考虑使用游标分页:游标分页可以像翻书一样连续翻页,利用有序唯一值作为定位锚点。这种方式可以避免遍历历史数据,在大数据量分页查询中可以显著提高性能。总结:在进行MySQL大数据量分页查询优化时,应综合考...

  •  翡希信息咨询 mysql 千万数据分页查询优化

    定期对索引进行重建或优化,可以保持索引的高效性。使用缓存 对于频繁访问的数据,可以使用缓存技术(如 Redis、Memcached 等)来减少数据库的查询压力。五、总结 在处理 MySQL 中千万级数据的分页查询时,需要综合考虑多种优化策略。通过避免大偏移量的 LIMIT、使用复合索引、分表与分区、优化查询字段和使用...

  •  翡希信息咨询 MYSQL分页limit速度太慢的优化方法

    原理:将LIMIT的offset量限制在一个合理的范围内,当offset超过这个范围时,认为没有数据。实现:可以在应用层设置一个阈值,当LIMIT的offset超过这个阈值时,直接返回空结果或提示用户。注意:这种方法适用于用户翻页次数不会太多的情况。总结:当MySQL表中的数据量很大时,直接使用LIMIT进行分页查询可能会导...

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

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

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

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

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

mySQL相关话题

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