数据库分页查询

数据库只所以要分页查询,其实是界面显示的需要,不是数据库的需要。

数据库本身查询是很快的。本文章是针对这种情况的。

如果数据库本身查询慢,那是优化查询语句的事情了。不在本文章范围内。

今天遇到了这个问题。

是个老项目。在原有的查询的基础上分页查询,提高显示效率。

1、尽量不作大的修改。
2、假设界面每页显示 1000 条数据。
3、下面 %sql% 可以是简单的表名,也可以是复杂的查询语句;
4、datetime 数据库排序字段。一般是最新的记录,显示在最前面;这里用时间字段;(降序)

第一页:

sql 复制代码
 select top 1000 * from (%sql%) order by datetime desc

**最末页:**用记录总数 mod 1000,计算出最末页要显示的记录个数。如果余数为0,那就是1000 条。否则就是余数 N。

sql 复制代码
 select * from 
  ( 
    select top N * from (%sql%) A order by datetime
  ) B order by datetime desc

原理:先升序查询数据,然后取出最前面的 N 条记录,就是最后一页要显示的 N 条记录了。再按降序排序。

**中间页:**有了上面最末页的思路,中间页也很容易实现了。

sql 复制代码
select * from 
  (
    select top 1000 * from 
    (
        select top 1000 * intPageIndex from (%sql%) A order by datetime desc
     ) B order by datetime
  ) C order by datetime desc

intPageIndex 为第几页。

原理和最末页的查询是一样的。

比如显示第5页,先按降序取出前 5000 条数据,再从这 5000 条数据中,取出最后的 1000 条,就是第5页要显示的数据了。

是不是很简单。

相关推荐
Gauss松鼠会17 分钟前
【GaussDB】在duckdb中查询GaussDB的数据
数据库·sql·database·gaussdb
虹科网络安全43 分钟前
艾体宝洞察 | Redis vs ElastiCache:哪个更具成本效益?
数据库·redis·缓存
自在极意功。1 小时前
MyBatis 动态 SQL 详解:从基础到进阶实战
java·数据库·mybatis·动态sql
老邓计算机毕设1 小时前
SSM校园订餐系统7z0dm(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·菜品管理系统·ssm 框架·ssm 框架开发·校园线上订餐平台
sxlishaobin1 小时前
MySQL- explain
数据库·mysql
曹牧1 小时前
Oracle:判断一个字符串出现次数
数据库·oracle
源代码•宸1 小时前
Leetcode—620. 有趣的电影&&Q3. 有趣的电影【简单】
数据库·后端·mysql·算法·leetcode·职场和发展
快乐肚皮2 小时前
MySQL递归CTE
java·数据库·mysql·递归表达式
2301_800256112 小时前
地理空间数据库中的CPU 和 I/O 开销
数据库·算法·oracle
Elseide艾思2 小时前
艾思政策数据库正式发布(1989年至今)
数据库