数据库分页查询

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

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

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

今天遇到了这个问题。

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

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页要显示的数据了。

是不是很简单。

相关推荐
SPC的存折3 分钟前
6、MySQL设置TLS加密访问
linux·运维·服务器·数据库·mysql
老苏畅谈运维4 分钟前
DBA分析 ORA 报错的利器,errorstack让 Oracle 错误现原形
数据库·oracle·dba
大江东去浪淘尽千古风流人物30 分钟前
【Basalt】nfr_mapper 中的“小 SfM/BA 后端”
c++·人工智能·计算机视觉·oracle·augmented reality
紫青宝剑30 分钟前
向量数据库 Milvus
数据库·milvus
雪碧聊技术32 分钟前
数据库系统基础知识
数据库
Elastic 中国社区官方博客32 分钟前
如何使用 LogsDB 降低 Elasticsearch 日志存储成本
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·可用性测试
Dreamboat-L32 分钟前
HBase远程访问配置(详细教程)
大数据·数据库·hbase
刘~浪地球34 分钟前
数据库与缓存--Redis 集群架构与优化
数据库·redis·缓存
羊小蜜.36 分钟前
Mysql 11: 存储过程全解——从创建到使用
android·数据库·mysql·存储过程
A__tao36 分钟前
一键实现 SQL 转 Elasticsearch Mapping(支持字段注释 + meta 描述)
数据库·sql·elasticsearch