news 2026/8/14 2:17:10

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

大家好,我是,欢迎来到《小5讲堂》。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

目录
  • 前言
  • 单字段查询
  • 多字段查询
  • 知识点
    • 基本语法
    • 分页查询示例
      • 示例 SQL 查询
    • 解释
    • 注意事项
  • 文章推荐

前言

最近创建了一张表,用于保存名称相关信息。
刚开始是没有加任何索引,数据不多时查询也没什么问题。
等到了表有5千多条记录后,查询变得很慢,设置需要二十多秒。
一起来看下这个博主是如何解决的?或者你们是否有更好的解决方案呢?也欢迎评论区留言。

单字段查询

刚开始给status字段设置索引,没效果。
直接再给time字段添加索引,有效果,查询秒出。

设置索引是占用一定物理空间大小,所以用物理空间大小还速度
1)单字段索引(适合单个字段排序或查询)
2)多字段索引(适合多个字段排序或查询)

【单字段查询】

-- CREATE INDEX time_index ON 目标表 (time) -- 设置表字段索引 select count(1) from 目标表 select * from ( select row_number() over(order by t.time) as rowindex,t.* from ( select * from 目标表 where status=10 ) t ) new_table where rowindex>((1-1)*10) and rowindex<=1*10;

温馨提示:当你的表数据很多的时候,不建议在可视化工具进行索引设置。可通过sql语句的方式

CREATE INDEX 索引名 ON 目标表 (字段1,字段2.。。)

多字段查询

【多字段查询】
支持模糊查询,字段status和name字段组合索引,查询秒出

where status=10 and name like’%张%’

select * from ( select row_number() over(order by t.time) as rowindex,t.* from ( select * from 目标表 where status=10 and name like'%张%' ) t ) new_table where rowindex>((1-1)*10) and rowindex<=1*10;

知识点

在 SQL Server 中,ROW_NUMBER()函数用于为结果集中的每一行分配一个唯一的顺序号。这是一个非常有用的函数,尤其是在分页查询中。以下是有关ROW_NUMBER()函数的一些基本说明:

基本语法

ROW_NUMBER() OVER (PARTITION BY partition_expression ORDER BY order_expression) AS row_number
  • PARTITION BY partition_expression:可选项,用于将数据分成不同的组。对于每个组,ROW_NUMBER()函数将重新开始计数。如果不使用PARTITION BY,则对整个结果集应用计数。
  • ORDER BY order_expression:指定排序的列,ROW_NUMBER()函数将根据这个排序规则分配行号。

分页查询示例

假设我们有一个员工表Employees,包含以下字段:EmployeeID,Name, 和Salary。我们希望对这个表进行分页查询,每页显示 10 条记录,且按薪资降序排序。可以使用ROW_NUMBER()函数来实现这一点。

示例 SQL 查询
WITH EmployeeRank AS ( SELECT EmployeeID, Name, Salary, ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNum FROM Employees ) SELECT EmployeeID, Name, Salary FROM EmployeeRank WHERE RowNum BETWEEN 11 AND 20;

解释

  1. CTE(公共表表达式)定义:我们创建了一个名为EmployeeRank的 CTE,其中包含ROW_NUMBER()函数来为每一行分配一个行号。排序规则是按Salary列降序排列。

  2. 分页查询:在外部查询中,我们通过WHERE RowNum BETWEEN 11 AND 20来提取第 2 页的数据(假设每页 10 条记录)。你可以根据需要调整BETWEEN的范围来获取不同页的数据。

注意事项

  • 性能:使用ROW_NUMBER()函数可能对性能有一定影响,尤其是在处理大型数据集时。确保对排序列进行适当的索引,以优化性能。

  • 偏移量和限制:在 SQL Server 2012 及以后的版本中,可以使用OFFSET-FETCH子句实现分页查询,这通常更简洁,也可以提高性能。示例如下:

    SELECT EmployeeID, Name, Salary FROM Employees ORDER BY Salary DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

    这个查询从第 11 行开始,取接下来的 10 行记录。OFFSETFETCH是 SQL Server 2012 引入的分页功能,更加直观且高效。

文章推荐

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:53:07

【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程

前言 在大数据和网络爬虫领域&#xff0c;Scrapy 是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目&#xff0c;并高效地从各种网站中提取数据。在本篇文章中&#xff0c;我将带大家从零开始使用 Scrapy 框架&#xff0c;构建一个简单的爬虫项目&am…

作者头像 李华
网站建设 2026/8/14 2:15:48

Simpack轨道车辆轮对扁疤故障设置及结果探秘

simpack轨道车辆&#xff0c;轮对扁疤故障设置&#xff0c;结果如下。 非教程。在轨道车辆的研究领域中&#xff0c;Simpack可是一款大名鼎鼎的多体动力学仿真软件。今天咱就唠唠Simpack轨道车辆里轮对扁疤故障设置这一有趣话题&#xff0c;顺便瞅瞅得出的结果都有啥门道。先来…

作者头像 李华
网站建设 2026/8/14 2:14:22

从CPU低延迟、GPU高带宽到大规模GPU集群

一、CPU和GPU的架构和特性计算任务的耗时体现在两个方面&#xff1a;逻辑复杂&#xff0c;海量。为了更快地处理比较复杂的任务&#xff0c;需要优化处理单个任务的时间&#xff0c;也就是低延迟&#xff0c;于是产生了CPU&#xff1b;为了更快地处理巨量互不依赖的任务&#x…

作者头像 李华
网站建设 2026/8/14 2:15:15

周红伟:【OpenClaw】升级指南

升级步骤 1. 检查当前状态和更新 openclaw status 一键获取完整项目代码 输出中会显示 Update: available&#xff0c;并提示可用的最新版本。2. 停止 Gateway 服务 直接运行 openclaw update 会遇到 EBUSY 错误&#xff0c;因为进程正在使用中。需要先停止服务&#xff1a;ope…

作者头像 李华
网站建设 2026/7/14 15:52:51

基于自适应在线学习的概率负荷预测:探索与实践

基于自适应在线学习的概率负荷预测在电力系统运行与规划中&#xff0c;负荷预测一直是个关键课题。传统的负荷预测方法往往难以应对复杂多变的实际情况&#xff0c;而基于自适应在线学习的概率负荷预测则为这一难题提供了新的解决思路。 一、什么是自适应在线学习 自适应在线学…

作者头像 李华
网站建设 2026/7/14 15:53:05

拒绝学术不端!靠谱论文降重软件推荐,越降越通顺

拒绝学术不端&#xff01;靠谱论文降重软件推荐&#xff0c;越降越通顺 一、中文降重首选&#xff1a;4款神器&#xff0c;适配知网/维普/万方&#xff0c;越降越有质感 1. SpeedAI科研小助手&#xff1a;综合首选&#xff0c;降重降AI双效天花板 作为中文降重的绝对首选&#…

作者头像 李华