MySQL中SQL分页查询的几种实现方法及优缺点
【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中分页查询的方法内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南