首页
学习
活动
专区
圈层
工具
发布

浅谈MySQL分页查询

MySQL系列文章到目前已经更新十几篇,从数据类型谈到了备份恢复再到主从同步分库分表,从本篇开始,会花几篇重点谈谈MySQL基础部分,而本篇我们重点来讲讲我们日常开发中最常见的一种查询:分页查询。...说到分页呢?我们都知道使用limit关键字来进行分页,比如我们需要查询id为900000到900100的数据,我们可能会很熟练的这么进行分页: ?...,可以减少回表次数并且减少Mysql扫描那些无效的行数: ?...,所以显而易见使用子查询进行分页效率比直接使用limit分页效率高很多。...所以在id能保证连续性的情况下我们可以选择使用限制id的方法提高分页效率。接下来我们看下如果id无法保证绝对连续除了子查询还能如何处理。

4.8K20

MySQL(联合查询、子查询、分页查询)

目录 联合查询 子查询 分页查询 联合查询 联合查询是指将多个查询结果合并成一个结果集(二维表),通常出现在统计分析中。 语法: 查询语句1 UNION 查询语句2 UNION ......有返回结果,执行select* from b_user; select * from b_order where order_id>10没有返回结果,执行select* from b_user; 返回空 分页查询...如果数据量过大(100亿),如果一次性显示10亿条数据,(100亿条数据本身从数据库中读取时慢【分库 分表】,将100亿条新闻展示在网页的过程也是很慢的) 手工分页 百度新闻、微商城、淘宝这些根据滚动条的位置来刷新数据...滚动条分页 基础语法: SELECT 查询字段列表 FROM 表名 WHERE 筛选条件 GROUP BY 分组列表 HAVING 筛选条件 ORDER BY 排序列表 LIMIT offset...; 如果offset为0 SELECT * FROM b_user LIMIT 2; 注意: 在SQL Server中使用top关键字进行分页;所谓top 7,代表查询前7条记录。

21.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用MySQL实现分页查询

    使用MySQL实现分页查询 本文关键字:MySQL、分页查询、真分页、假分页、LIMIT 在项目开发当中,经常要实现分页功能,在面试时也会经常被问到,什么是分页。...真分页 真分页指的是每次在进行翻页时都只查询出当前页面的数据,特点就是与数据库的交互次数较多,但是每次查询的数据量较少,数据也不需要一直保存在内存中。...缓存层 真分页和假分页都要和数据库进行交互,对于真分页来说不需要担心数据同步的问题,因为每次都是查询出最新的,但是数据库的负担会很重,尤其是用户量大的情况下。...在对数据库中的数据进行修改后,要将变更后的数据及时同步到缓存层,在进行数据查询时从缓存层获取。 ? 二、MySQL实现分页 本文将介绍如何通过真分页的方式,每次取出所需数据。...对于不同的数据,实现分页有不同的方式,在MySQL中可以使用LIMIT来限制查询出的数据。 1. LIMIT用法 LIMIT出现在查询语句的最后,可以使用一个参数或两个参数来限制取出的数据。

    18.8K52

    oracle、mysql 分页查询比较

    1、 Oracle的分页查询语句 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE...ROWNUM = 21控制分页查询的每页的范围。 上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。...那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。...* FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 2、 MySQL的分页查询语句 在PhpMyAdmin里执行如下SQL: SELECT...1000000 , 1(6.7732 秒) SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5838 秒) 有网友说如果是MySQL

    3.7K90

    MySQL——优化嵌套查询和分页查询

    ,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作;并且Not exists表示MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了...优化分页查询 在MySQL中做分页查询,MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下...例如“limit 1000,20”,此时MySQL排序出前1020条数据后仅仅需要第1001到1020条记录,前1000条数据都会被抛弃,查询和排序的代价非常高。...由此可见MySQL的分页处理并不是十分完美,需要我们在分页SQL上做一些优化,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。...总结 对于嵌套查询和分页查询的优化,归根结底就是遵循SQL优化原则之一——减少回表查询的I/O次数。对于分页查询优化,更建议使用第一种优化方案,性能更好,稳定性更高。 参考 《深入浅出MySQL》

    4.2K21

    oracle、mysql 分页查询比较

    1、 Oracle的分页查询语句 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE...ROWNUM = 21控制分页查询的每页的范围。 上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。...那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。...* FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 2、 MySQL的分页查询语句 在PhpMyAdmin里执行如下SQL: SELECT...1000000 , 1(6.7732 秒) SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5838 秒) 有网友说如果是MySQL

    3.7K80

    mysql慢查询优化-分页慢查询篇

    前提介绍 为何分页查询在测试环境没事,在生产上几千万的数据就出现了问题 在平时开发时,由于数据量没有那么大,所以测试有时候会不到位,比如用到的分页查询,使用不规范时,数据量越大,查询越慢,而且有 长时间进程不结束...,会导致内存不足等风险 传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,...因为要取出所有字段内容,这种需要跨越大量数据块并取出 推荐分页查询方法 通过直接根据索引字段定位后,才取出相应内容,效率自然大大提升。...1、尽量给出查询的大致范围 SELECT c1,c2,cn… FROM table WHERE id>=20000 LIMIT 10; 2、子查询法 SELECT c1,c2,cn… FROM table...id from product limit 866613, 20) b ON a.ID = b.id 3、高性能MySQL一书中提到的只读索引方法 优化前SQL: SELECT c1,c2,cn… FROM

    4.3K21

    MySQL 案例:Limit 分页查询优化

    在 MySQL 支持的 SQL 语法中对此有特殊的支持,开发人员在实现这类功能的时候很方便: select * from xxx limit M,N select * from xxx limit N...可以看到跳过的行数大幅度增长时,SQL 语句的执行时间也会快速增长,原因其实比较简单:在处理 limit M,N 的时候,MySQL 会先拿到 M+N 行结果数据,然后再丢弃 M 行数据,展示之后剩下的...在分页查询的时候,记录上一次查询结果中的主键,然后在 where 条件中添加主键的范围约束。...以上面的查询为例,上次分页查询时的主键是 8000001,那么下次分页的时候,where 条件中添加一个主键约束:id > 8000001,再来看看查询效果: [添加条件之后的效果] 可以发现利用主键来筛选掉上一次分页前的所有数据后再用...总结一下 MySQL 由于本身查询优化器覆盖到的场景不够全,慢查询的原因也千奇百怪,各类业务 SQL 在上线前尽量多覆盖一些场景,确保业务功能安全发布。

    4.9K4432

    【MySQL】:分组查询、排序查询、分页查询、以及执行顺序

    本文将深入探讨DQL的分组查询、排序查询和分页查询等常见操作,为读者提供全面的DQL查询知识。 一....分页查询 分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台都需要借助于数据库的分页操作。...分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。 3.3 案例: A....、排序查询和分页查询等常见操作,包括语法、注意事项和实例演示。...全篇总结 本文详细介绍了DQL(Data Query Language)的分组查询、排序查询和分页查询等常见操作,包括语法、注意事项和实例演示。

    4K10

    SSM框架——实现分页和搜索分页

    分页是Java Web项目常用的功能,昨天在Spring MVC中实现了简单的分页操作和搜索分页,在此记录一下。使用的框架为(MyBatis+SpringMVC+Spring)。...首先我们需要一个分页的工具类: 1.分页 import java.io.Serializable; /** * 分页 */ public class Page implements...="pageSize") Integer pageSize,@Param(value="userId") Integer userId); /** * 取得产品数量信息,通过登录用户ID查询...-- 分页功能 End --> 2.查询分页 关于查询分页,大致过程完全一样,只是第三个参数(上面是loginUserId)需要接受用户输入的参数,这样的话我们需要在控制器中接受用户输入的这个参数(页面中的...使用GET方式传参),然后将其加入到SESSION中,即可完成查询分页(此处由于“下一页”这中超链接的原因,使用了不同的JSP页面处理分页和搜索分页,暂时没找到在一个JSP页面中完成的方法

    2.3K40

    MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】

    本文将深入探讨 MySQL 高级查询技巧,重点讲解 GROUP BY、HAVING、各种聚合函数、子查询以及分页查询(LIMIT 语法)的使用。...(page - 1) * pageSize, pageSize 七、常见报表需求实践 以下为结合 GROUP BY、聚合函数、子查询与分页的常见报表查询场景。...8.1 使用覆盖索引加速分页 -- 仅查询主键或索引字段 SELECT employee_id FROM employees ORDER BY hire_date DESC LIMIT 100000,...复杂条件过滤、嵌套数据分析 LIMIT 分页列表、Top N 取值 分页优化 大数据分页响应慢时的优化方案 实战建议: 分组前过滤用 WHERE,分组后过滤用 HAVING 复杂统计尽量使用子查询或视图...,保持主查询简洁 分页查询在大数据场景下需优化 LIMIT 的性能 GROUP_CONCAT 适合小量数据展示,不宜用于大表 本项目适用于后台管理系统、电商用户中心、SaaS 用户模块等场景,特别适合开发者进行实战演练与面试准备

    89910

    MySQL之分页多次查询优化 原

    分页查询一般都会出现俩次查询,此时会有如下情况: 要得到满足条件的那一页记录数。 要得到满足条件的总记录数。    ...如果在第一个查询和第二个查询之间新增或者删除了一些数据,那么查询的结果就不准备了。我想大家都能想象这个场景,在此就不举例。    ...有什么解决方法,不会出现上述的问题,经过一番搜索,发现MySQL可以使用 List-1 ELECT FOUND_ROWS();     我们来验证下: 1.不带Limit的查询情况 List-2 得到...    这里就不再给出具体例子,看MySQL官网文档,上面有具体描述。...Reference: MySQL官网: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html https://blog.sqlauthority.com

    1.4K50

    浅谈MySQL分页查询的工作原理

    前言 MySQL 的分页查询在我们的开发过程中还是很常见的,比如一些后台管理系统,我们一般会有查询订单列表页、商品列表页等。...4.2 深度分页问题 SELECT * FROM goods ORDER BY price LIMIT 80000,10 这样的 sql 就是深度分页了,我们之前讲到,MySQL 的底层会查询出 80010...要解决这种深度分页问题首先应该在产品的设计方面避免这种情况,还有就是我们在查询分页数据时应该需要根据时间做好限制,减少数据,以及对前端传进来的 start、limit 字段进行判断限制。...如果还是需要深度分页,就需要利用子查询来实现。...,然后进行分页过滤出我们需要主键 id,再去主键索引查询数据(因为排序字段就是我们的二级索引字段,所以查询出来的数据直接就是有序的,无需再进行文件排序)。

    3.1K30
    领券