sql server中千万数量级分页存储过程代码

yizhihongxing

分页是 Web 应用中常见的功能.当数据表中拥有千万条记录时,需要进行分页查询时,直接使用基础的分页查询语句可能会导致较高的性能消耗和响应延迟.因此需要使用分页存储过程来提高查询性能.

以下是 sql server 中 千万数量级分页存储过程代码的完整攻略:

  1. 分页查询的数据表

该数据表中共有 10000000 条记录,将其命名为test表.其中,主键为id,需要进行分页的条件为state=1.

  1. 定义存储过程

定义名为p_Page的存储过程,传入参数为 @pageIndex, @pageSize,@pageCount.

示例:

CREATE PROCEDURE [dbo].[p_Page]
   @pageIndex INT,  --页码
   @pageSize INT, --每页数据条数
   @pageCount INT OUT --总页数
AS

SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowID, * INTO #temptable FROM  test WHERE state=1

SET @pageCount = CEILING((SELECT COUNT(*) FROM #temptable) / CAST(@pageSize AS DECIMAL(16,2)))  --总页数

SELECT * FROM #temptable WHERE RowID BETWEEN ( (@pageIndex - 1) * @pageSize + 1 ) AND ( @pageIndex * @pageSize )

DROP TABLE #temptable
  1. 存储过程代码解析

a. 使用 SELECT INTO #temptable 创建临时表。

此步骤将test表中state=1的所有记录按照id排序,进行分页查询的结果保存到#temptable临时表中.

b. 使用ROW_NUMBER() OVER (ORDER BY id) AS RowID将当前行转换为数字.

ROW_NUMBER()在 SQL Server 中用来为查询结果集的每一行来赋一个行号,而使用 OVER 子句总是跟着一个 ORDER BY 子句,以确定如何为分配行号。本例中根据id进行排序.

c. 根据每页数据条数计算总页数。

在计算总页数时需要使用 CEILING() 函数和 CAST( ) 函数. 在 #temptable 临时表中的记录总数除以每页数据条数,并将结果转换为 decimal(16,2) 类型,然后使用 CEILING()函数将结果向上舍入得到总页数.

d. 使用 BETWEEN 运算符查询预期范围的记录.

在这里,可以使用 BETWEEN 运算符查询 ROW_NUMBER 列的值在页内的范围之间的记录. 具体地,计算起始行和结束行,然后查询两列之间的所有行.

e. 清空临时表。

使用DROP TABLE 语句清空#temptable表.

  1. 测试存储过程
DECLARE @pageCount INT

EXEC [dbo].[p_Page] @pageIndex=1, @pageSize=10, @pageCount=@pageCount OUTPUT

SELECT * FROM #temptable

SELECT @pageCount

预期结果如下:

  • 显示第一页的第1-10条数据
  • 输出总页数

注意,在运行以上的示例代码之前,请确保临时表已经被删除. 否则,可能会得到以下错误消息:“There is already an object named '#temptable' in the database.”.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sql server中千万数量级分页存储过程代码 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Mysql按条件计数多种实现方法详解

    Mysql按条件计数多种实现方法详解 在MySQL中计算数据的数量是一项常见的任务,会在实际应用开发中频繁出现。本文将介绍Mysql按条件计数的多种实现方法,以帮助开发者更好地处理数据。 1. 基础语法 Mysql中计算数据数量所用的语法为COUNT,该语法可用于统计整个表中的记录数量,也可以统计符合某个条件的记录数量。 示例如下: — 统计表中所有记录数…

    database 2023年5月22日
    00
  • MySQL选择数据库(MySQL USE语句)

    MySQL是一种流行的关系型数据库管理系统,它被广泛用于互联网应用程序和其他软件中。选择数据库(USE)是MySQL中最基本的命令之一,它用于指定当前使用的数据库。 本文将详细介绍MySQL选择数据库(USE语句)的使用方法。 基本语法 USE语句的基本语法如下: USE database_name; 其中,database_name指要使用的数据库名称。 …

    MySQL 2023年3月9日
    00
  • MySQL性能优化的一些技巧帮助你的数据库

    MySQL性能优化攻略 1. 确定性能瓶颈 在进行MySQL性能优化时,第一步就是要确定数据库性能的瓶颈,然后针对性地进行解决。常见的MySQL性能瓶颈包括: CPU利用率过高 磁盘IO瓶颈 内存瓶颈 网络瓶颈 可以通过top命令或者MySQL自带的性能监控工具如SHOW GLOBAL STATUS、SHOW GLOBAL VARIABLES等来确定性能瓶颈…

    database 2023年5月19日
    00
  • 网络营销seo 手把手教你做企业网站数据库营销

    网络营销SEO手把手教你做企业网站数据库营销攻略 第一步:确定关键词 要做好SEO,第一步就是确定关键词。你需要了解你的目标用户搜索什么关键词,以及这些关键词的搜索量、竞争度等信息。通过工具如Google Keyword Planner等进行关键词分析,并选择适合自己网站的关键词。 示例1:假设你是一家家居用品企业,你希望抓住潜在客户,促进销售。你可以通过G…

    database 2023年5月19日
    00
  • MySQL中create table语句的基本语法是

    MySQL中create table语句是用于创建新表的关键字,其基本语法如下: create table table_name( column1 datatype, column2 datatype, column3 datatype, … ); 其中table_name是要创建的表的名称,column1, column2, column3, …是…

    database 2023年5月22日
    00
  • 建立一个数据仓库

    建立一个数据仓库的完整攻略包括以下步骤: 需求分析 在建立数据仓库之前,需要对业务需求进行充分的分析。这包括收集需求,理解业务流程和数据,定义指标和数据清洗规则等。此过程的目标是确定要收集哪些数据,如何将其存储和管理以及如何定义指标。 建立数据模型 建立数据模型是建立数据仓库的第一步。这个步骤需要定义维度和事实表。维度以分析业务事件和事实发生的上下文为基础定…

    database 2023年3月27日
    00
  • Linux服务器的一些基本应用

    Linux服务器的一些基本应用攻略 在Linux服务器上,有一些常用的基本应用程序可以帮助我们更好地管理和维护服务器。以下是一些重要的应用程序和命令,在本文中将进行详细讲解。 SSH SSH是远程登录到Linux服务器的标准方式,它通过使用加密的网络协议来保护数据的安全传输。在安装SSH之后,可以使用如下命令来连接到远程服务器: ssh username@h…

    database 2023年5月22日
    00
  • SQLServer中merge函数用法详解

    SQLServer中merge函数用法详解 在SQLServer中,我们经常需要将两张相近的表格进行合并更新,这时merge函数就派上用场了。常见的场景比如我们需要将销售情况表中的数据与客户信息表中的数据进行匹配,更新客户的联系方式。使用merge函数可以轻松完成该任务。 merge函数基本语法 MERGE target_table USING source…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部