Mysql——》优化limit分页

这篇具有很好参考价值的文章主要介绍了Mysql——》优化limit分页。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

在系统中需要进行分页操作的时候,我们通常会使用LIMIT加上偏移量的办法实现,同时加上合适的ORDER BY子句。

需要优化的场景

在偏移量非常大的时候,需要查询并抛弃很多记录,最后却只返回很少记录

-- 查询10010条记录然后只返回最后10条,前面10 000条记录都将被抛弃,这样的代价非常高。
select * from order_exp limit 10000,10;

优化方案一

  1. 首先查询翻页中需要的N条数据的主键值
  2. 然后根据主键值回表查询所需要的N条数据
EXPLAIN SELECT * FROM (select id from order_exp limit 10000,10) b,order_exp
					a where a.id = b.id;

优点:查询N条数据的主键id在索引中完成,效率高
缺点:如果数据量大,可以还会存在性能问题文章来源地址https://www.toymoban.com/news/detail-548804.html

优化方案二

  1. 前端通过点击More来获得更多数据,而不是纯粹的翻页,并且每次查询只需要使用上次查询出的数据中的id来获取接下来的数据
  2. 后端根据主键值id,获取数据
EXPLAIN select * from order_exp where id > 67 order by id limit 10;

到了这里,关于Mysql——》优化limit分页的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql深度分页优化的一个实践

    问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset=1000w, limit=10, 那么

    2024年01月19日
    浏览(25)
  • 【性能优化】MySQL百万数据深度分页优化思路分析

            一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行 分页查看 , 最常见的一种就是根据日期进行筛选 。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万、千万条数据只是时间问题。 一、数

    2024年02月15日
    浏览(38)
  • MySQL百万数据深度分页优化思路分析

    一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行 分页查看 , 最常见的一种就是根据日期进行筛选 。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万、千万条数据只是时间问题。 创建了一张user表,

    2024年02月03日
    浏览(42)
  • MySQL大数据量分页查询方法及其优化

    ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适应场景: 适用于数据量较少的情况(元组百/千级) ---原因/缺点: 全表扫描,速度会很慢 且 有的数据库 结果集返回不稳定 (如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从

    2024年02月15日
    浏览(26)
  • 面试官:Mysql千万级大表如何进行深度分页优化?

    假如有一张千万级的订单表,这张表没有采用分区分表,也没有使用ES等技术,分页查询进行到一定深度分页之后(比如1000万行后)查询比较缓慢,我们该如何进行优化? 订单表结构如下: 其中 Mysql 版本为8.0。我们使用Python脚本向表中插入2000万条数据。 导出数据时我们需

    2024年02月19日
    浏览(35)
  • mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

    传入tableName参数就可以了,不过只能用$不能用# 因为#会发生预编译,然后会在表名上加引号’\\\'。 新建一个表名拦截类实现TableNameHandler mybatisPlus添加插件 实例: 每天按统计 如果表名为count则加上今天的时间 每次设置 直接设置名字,然后就会改变的。 需要在配置文件中的

    2024年01月16日
    浏览(36)
  • Mysql中的LIMIT 语句

    LIMIT 语句是 MySQL 中常用的语句之一,它主要用于从关系型数据库中读取数据时,指定需要读取的行数。可以利用该语句实现分页功能,或者限制结果集返回的行数。其中最常用的语法格式如下: SELECT column1, column2, ... FROM table_name LIMIT offset, count; 其中, offset 代表偏移量,表示

    2024年02月09日
    浏览(31)
  • limit(mysql),rownum(Oracle)

    Oracle数据库不支持mysql中limit功能 但Oracle可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的。 题目: 查看表前两行数据 mysql: 可以用limit   Oracle: 可以用rownum

    2024年02月15日
    浏览(33)
  • mysql数据库limit的四种用法

    mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目;若果给定一个参数,则表示回记录行的最大

    2024年02月08日
    浏览(39)
  • MySQL 系列:注意 ORDER 和 LIMIT 联合使用的陷阱

    不知道大家在在分页查询中有没有遇到过这个问题,分页查询中不同的页中出现了同一条数据,出现了分页错乱的问题: 整体排序: SELECT * from test_1 ORDER BY create_date; 提取排序后的前两条: SELECT * from test_1 ORDER BY create_date LIMIT 0,2; 提取排序后的最后两条: SELECT * from test_1 ORDE

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包