热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql怎样实现分页查询

mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between…and】,id必须是连续递增的;4、保留上一页记录所在id。

mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between … and】,id必须是连续递增的;4、保留上一页记录所在id。

mysql分页查询的方法:

简述

  • 通常在MySQL中通过limit #{limit},#{offset}来进行分页查询。

  • 当表中记录较多且页数(#{limit})较大时,分页查询效率变慢。

  • 变慢的原因时,分页查询时,会先查询出limit + offset条记录,然后截取后面的offset记录。

  • 本文以实际1.4亿的表big_table为例,记录如何优化分页查询。

测试说明

  • 测试表:big_table,数据量:1.4亿。

原始SQL(4500ms)

-- 原始分页查询,耗时:4500ms
select * 
from big_table
limit 2000000,10;

慢的原因:

1、查询条件为*

2、limit = 2000000太大

优化一(推荐):用具体字段代替*(1600ms)

-- 用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment 
from big_table
limit 2000000,10;

优化二:先查寻索引(450ms)

-- 方法1:先对索引进行分页查询,耗时:450ms
select * from big_table AS h inner join
 (select id from big_table
  limit 2000000,10) AS ss 
 on h.id = ss.id;
-- 方法2:先查询出起始位置的索引,耗时:450ms
select * from big_table
where id > (
select id from big_table limit 2000000,1
)
limit 10;

优化三:between … and(5ms)

限制:id必须是连续递增的。

-- 上一页保留最后一条记录所在id,耗时:5ms
select * from big_table
where id between 4882489 and 4882489 + 10 ;

优化四(推荐):保留上一页记录所在id(5ms)

限制:需要保留上一页的最后一条记录所在id

-- 上一页需要保留最后一条记录所在id,耗时:5ms
select * from big_table
where id > 4882488
limit 10;

更多相关免费学习推荐:mysql教程(视频)

以上就是mysql怎样实现分页查询的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 开发日志:在插入数据到一张表的同时更新另一张表的技术细节与最佳实践 ... [详细]
  • 推荐:利用Dapper.SimpleCRUD扩展Dapper功能以简化CRUD操作
    Dapper作为广受欢迎的ORM框架之一,虽然灵活性极高,但在处理基本的CRUD操作时仍需手动编写SQL语句,这无疑增加了开发工作量。为了解决这一问题,Dapper.SimpleCRUD扩展库应运而生。该扩展库通过提供简洁的方法,显著简化了数据访问层的开发流程,使开发者能够更加高效地进行读取、插入、更新和删除操作。此外,Dapper.SimpleCRUD还支持事务管理和批量操作,进一步提升了开发效率和代码可维护性。 ... [详细]
  • 在计算机领域,锁机制的作用类似于现实生活中的锁,用于保护共享资源免受并发访问冲突的影响。对于Java开发人员而言,深入了解数据库锁定机制至关重要,因为这不仅能够确保数据的一致性和完整性,还能有效提升系统的性能和稳定性。常见的锁机制包括Java中的`Lock`和`synchronized`关键字,它们在多线程环境中发挥着关键作用,帮助开发人员更好地管理和控制资源访问。 ... [详细]
  • PHP与MySQL的Web应用开发技术深入解析
    PHP与MySQL的Web应用开发技术深入解析 ... [详细]
  • Syncnavigator激活工具及破解方法详解
    本文详细介绍了Syncnavigator激活工具的使用方法及其破解技巧。用户可以通过访问官方网站www.SyncNavigator.CN获取相关资源,并通过客服QQ 1793040获得技术支持和帮助。此外,文章还提供了详细的步骤说明和常见问题解答,以确保用户能够顺利激活并使用Syncnavigator软件。 ... [详细]
  • 源代码是构建网站的基础,涵盖了网站程序的所有代码、文件和目录结构。掌握源代码意味着完全控制网站的所有权。在传统自助建站平台中,由于采用SAAS模式,源代码通常不对外开放,用户实际上每年支付的费用仅是为了使用这些平台提供的服务,而无法获得真正的代码所有权。相比之下,米拓源代码提供了全面的技术细节和实现方法,使开发者能够深入了解并自主定制网站功能,确保了更高的灵活性和安全性。 ... [详细]
  • 在MySQL中生成UUID可以通过以下SQL语句实现:生成大写的UUID使用 `SELECT UPPER(UUID())`;生成小写的UUID使用 `SELECT LOWER(UUID())`;生成标准格式的UUID使用 `SELECT UUID()`;若需生成去掉横杠的UUID,可以使用 `SELECT REPLACE(UUID(), '-', '')`。这些方法为数据标识提供了灵活且唯一的解决方案。 ... [详细]
  • 本文详细介绍了 PHP 中 `sprintf` 函数的使用方法,并通过具体示例进行说明。例如,使用 `%%` 作为参数时,`%%` 会被替换为 `%`。通过 `echo sprintf($str)` 可以验证这一行为,返回的结果是“测试一下 % 这个参数,会被替换成什么”。此外,文章还探讨了 `sprintf` 函数在格式化字符串中的多种应用场景,包括数字格式化、日期时间处理等,帮助读者全面掌握该函数的使用技巧。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • PHP 数组逆序排列方法及常用排序函数详解 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 本文详细解析了MySQL中的多表联合查询技术,涵盖了内连接、外连接和交叉连接三种主要类型。通过具体示例,深入探讨了每种连接方式的使用场景和实现方法,帮助读者全面掌握SQL查询技巧,提升数据处理能力。 ... [详细]
  • 在数据库事务处理中,InnoDB 存储引擎提供了多种隔离级别,其中 READ COMMITTED 和 REPEATABLE READ 是两个常用的选项。本文详细对比了这两种隔离级别的特点和差异,不仅从理论角度分析了它们对“脏读”和“幻读”的处理方式,还结合实际应用场景探讨了它们在并发控制和性能表现上的不同。特别关注了行锁机制在不同隔离级别下的行为,为开发者选择合适的隔离级别提供了参考。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
赵丶宇森
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有