主页 > 知识库 > MySQL中SQL分页查询的几种实现方法及优缺点

MySQL中SQL分页查询的几种实现方法及优缺点

热门标签:新乡智能外呼系统好处 地图标注客户付款 临沂做地图标注 广东400企业电话申请流程 宜宾全自动外呼系统厂家 石家庄400电话办理公司 申请400电话电话价格 咸阳防封电销卡 许昌外呼增值业务线路

【SQL】SQL分页查询总结

开发过程中经常遇到分页的需求,今天在此总结一下吧。

简单说来方法有两种,一种在源上控制,一种在端上控制。源上控制把分页逻辑放在SQL层;端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridView)。显然,端上控制开发难度低,适于小规模数据,但数据量增大时性能和IO消耗无法接受;源上控制在性能和开发难度上较为平衡,适应大多数业务场景;除此之外,还可以根据客观情况(性能要求,源与端的资源占用等)在源和端之间加一层,应用特殊算法和技术进行处理。以下主要讨论源上,即SQL上的分页。

分页的问题其实就是在满足条件的一堆有序数据中截取当前所需要展示的那部分。实际上各种数据库都考虑到分页问题而内置了一些策略,比如MySql的LIMIT,Oracle的ROWNUM和ROW_NUMBER(),SqlServer的TOP和ROW_NUMBER(),基于此我们可以得到一系列分页的方法。

1、 基于MySql的LIMIT和Oracle的ROWNUM,可以直接限制返回区间(以MySql为例,注意使用Oracle的ROWNUM时要应用子查询):

方法一、直接限制返回区间

SELECT * FROM table WHERE 查询条件 ORDER BY 排序条件 LIMIT ((页码-1)*页大小),页大小;

优点:写法简单。
缺点:当页码和页大小过大时,性能明显下降。
适用:数据量不大。

2、基于LIMIT(MySql)、ROWNUM(Oracle)和TOP(SqlServer),他们可以限制返回的行数,因此可以得到以下两套通用的方法(以SqlServer为例):

方法二、NOT IN

SELECT TOP 页大小 * FROM table WHERE 主键 NOT IN
(
 SELECT TOP (页码-1)*页大小 主键 FROM table WHERE 查询条件 ORDER BY 排序条件
)
ORDER BY 排序条件

优点:通用性强。
缺点:当数据量较大时向后翻页,NOT IN中的数据过大会影响性能。
适用:数据量不大。

方法三、MAX

SELECT TOP 页大小 * FROM table WHERE 查询条件 AND id >
(
 SELECT ISNULL(MAX(id),0) FROM 
 (
  SELECT TOP ((页码-1)*页大小) id FROM table WHERE 查询条件 ORDER BY id 
 ) AS tempTable
) 
ORDER BY id

优点:速度快,特别是当id为主键时。
缺点:适用面窄,要求排序条件单一且可比较。
适用:简单排序(特殊情况也可尝试转换成类似可比较值处理)。

3、基于SqlServer和Oracle的ROW_NUMBER(),可以得到返回数据的行号,基于此在限制返回区间得到如下方法(以SqlServer为例):

方法四、ROW_NUMBER()

SELECT TOP 页大小 * FROM 
(
 SELECT TOP (页码*页大小) ROW_NUMBER() OVER (ORDER BY 排序条件) AS RowNum, * FROM table WHERE 查询条件
) AS tempTable
WHERE RowNum BETWEEN (页码-1)*页大小+1 AND 页码*页大小
ORDER BY RowNum

优点:在数据量较大时相比NOT IN有优势。
缺点:小数据量时不如NOT IN。
适用:大部分分页查询需求。

以上是自己总结的拙见,性能比较来自网上资料及个人判断,并没有深入实验,不当之处请大家指正。

到此这篇关于MySQL中分页查询的几种实现方法及优缺点的文章就介绍到这了,更多相关MySQL中分页查询的方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家

您可能感兴趣的文章:
  • MySQL优化教程之超大分页查询
  • MySQL百万级数据量分页查询方法及其优化建议
  • MySQL百万级数据分页查询优化方案
  • mysql千万级数据分页查询性能优化
  • Mysql Limit 分页查询优化详解
  • php分页查询mysql结果的base64处理方法示例
  • 详解MySQL的limit用法和分页查询语句的性能分析
  • MySQL 分页查询的优化技巧

标签:贵州 台湾 阜新 镇江 合肥 北京 鹰潭 日照

巨人网络通讯声明:本文标题《MySQL中SQL分页查询的几种实现方法及优缺点》,本文关键词  MySQL,中,SQL,分页,查询,的,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《MySQL中SQL分页查询的几种实现方法及优缺点》相关的同类信息!
  • 本页收集关于MySQL中SQL分页查询的几种实现方法及优缺点的相关信息资讯供网民参考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推荐文章