分享三种高效率SQL语句分页方法

键盘旁的猫
键盘旁的猫
发布时间:2026-10-15| 5人浏览过
原创

在进行Web应用开发时,处理海量数据的分页展示是提升用户体验的核心环节。本文详细解析三种常用的SQL Server高效分页实现方式,重点介绍如何利用主键索引、排除法以及子查询技巧,应对不同数据量和排序需求。

结果或目标

从表中获取指定页码和页大小的数据记录,同时保持较低的数据库响应时间。

准备条件

  • 支持 TOP 关键字的数据库环境(如 Microsoft SQL Server)。
  • 了解基本的变量定义语法及子查询用法。

真实操作顺序

第1步:基于自增ID的主键分页(推荐高性能场景)

目的:当表存在自动增长的 id 字段作为主键时,利用索引直接定位,这是理论上最快的方法。

参数:

  • Page:当前请求的页码(从1开始)。
  • PageCount:每页显示的条数。

操作:

Select top PageCount * From [tb_code] Where id>=(select min(id) from (select top (Page-1)*PageCount+1 id from [tb_code] order by id desc) as t) order by id desc

原理与完成状态:

  1. 通过子查询找到第 (Page-1) 页的第一条记录的 id(实际上是第 (Page-1)*PageCount + 1 条最大的ID)。
  2. 外层查询选取大于等于该 id 的前 PageCount 条记录。
  3. 返回符合当前页范围的数据集。

第2步:NOT IN 排除法(适合非主键排序)

目的:在不依赖主键顺序的情况下,按任意字段排序并跳过前N条数据。

操作:

SELECT TOP 10 id,username From [tb_code] where id not in ( SELECT TOP 20000 id FROM tb_code ORDER BY username)

优点与不足:

  • 优点:支持根据表中任一个字段进行排序。
  • 缺点:在超大数据量(如几百万条以上)下,由于全表扫描和NOT IN逻辑判断,效率略逊于基于索引的主键分页。

第3步:双重TOP与倒序排列(子排序技巧)

目的:通过两次应用 TOP 关键字来实现特定排序下的分页,无需使用复杂的 RUNNUM 等窗口函数。

操作:

SELECT TOP 10 id,username From (SELECT TOP page*pagecount id, username FROM tb_code ORDER BY username) DERIVEDTBL ORDER BY username DESC

注意:

此方法虽然能按任意字段排序,但由于涉及到内部子集的全量选取与外部倒序,通常被认为是这三种方法中效率最低的,适用于中小规模数据测试或旧版数据库兼容场景。

第4步:使用 ROWNUM 标记行号(传统方法)

目的:利用函数为每一行打上序号标记,再进行区间过滤。

操作:

-- 例如查看第10到第20条之间的数据
SELECT * FROM (SELECT rownum rowcount, USER.* FROM USER) WHERE ROWCOUNT >=10 AND ROWCOUNT <20

说明:

其中 ROWNUM 用来记录每一条数据所在的位置。这种写法直观易懂,但在现代大型数据库中可能产生临时表和额外的计算开销。

完成判断

执行上述脚本后,观察返回的行数是否严格等于设定的 PageCount,且数据内容与预期页码匹配即可。

简要总结

在处理百万级以上数据时,强烈建议优先采用第1步基于自增主键的分页方式,以最大程度减少数据库IO消耗。若需对非索引字段排序,可根据数据体量评估是否接受 NOT IN 或双重 TOP 带来的性能损耗。

以上就是分享三种高效率SQL语句分页方法的详细内容,更多关于SQL Server 数据提取技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。