mssql 高效的分页存储过程分享
近期我面对了一项挑战:处理数百万条数据的分页查询。我深入研究了许多策略,并在本机的实际数据库上进行了详尽的测试。这个过程可谓历经波折,今天我不打算赘述细节,直接进入正题。这也是大多数寻找答案的朋友们最期待的方式。
下面我要分享的是一个存储过程的代码,它能帮助你处理这类大规模数据的分页查询。
存储过程的代码如下:
```sql
CREATE PROCEDURE [dbo].[P_GridViewPager] (
@recordTotal INT OUTPUT, --输出记录总数
@viewName VARCHAR(800), --表名
@fieldName VARCHAR(800) = '', --查询字段
@keyName VARCHAR(200) = 'Id', --索引字段
@pageSize INT = 20, --每页记录数
@pageNo INT =1, --当前页
@orderString VARCHAR(200), --排序条件
@whereString VARCHAR(800) = '1=1' --WHERE条件
)
AS
BEGIN
DECLARE @beginRow INT
DECLARE @endRow INT
DECLARE @tempLimit VARCHAR(200)
DECLARE @tempCount NVARCHAR(1000)
DECLARE @tempMain VARCHAR(1000)
-- declare @timediff datetime
set nocount on --关闭计数,提高执行效率
-- select @timediff=getdate() --记录时间
SET @beginRow = (@pageNo - 1) @pageSize + 1 --计算起始行号
SET @endRow = @pageNo @pageSize --计算结束行号
SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR) --定义行限制条件
--输出参数为总记录数
SET @tempCount = 'SELECT @recordTotal = COUNT() FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'
EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT --执行计数查询,获取总记录数
--主查询返回结果集
SET @tempMain = 'SELECT FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit --构建主查询语句
--PRINT @tempMain --打印查询语句(可选)
EXECUTE (@tempMain) --执行主查询,返回结果集
--select datediff(ms,@timediff,getdate()) as 耗时 --记录查询耗时(可选)
set nocount off --结束过程时开启计数
END
GO
```
这个存储过程用于处理大规模数据的分页查询,通过构建动态SQL语句来执行查询,并返回结果集。它考虑了多种参数,如表名、查询字段、索引字段、每页记录数、当前页、排序条件和WHERE条件等。它还考虑了查询效率,通过关闭计数和提高执行效率来优化性能。希望这个存储过程能帮助你解决类似的问题。
编程语言
- mssql 高效的分页存储过程分享
- Js查找字符串中出现次数最多的字符及个数实例解
- laravel 操作数据库常用函数的返回值方法
- 如何理解Vue的作用域插槽的实现原理
- asp.net mvc验证码类使用
- 详解AngularJS跨页面传值(ui-router)
- PHP通过内置函数memory_get_usage()获取内存使用情况
- SQL语句实现查询并自动创建Missing Index
- vue综合组件间的通信详解
- Vue运用transition实现过渡动画
- asp 图片正则 替换,替换前检查图片是不是本地地
- 在Node.js应用中读写Redis数据库的简单方法
- JQuery动画与特效实例分析
- 一次因composer错误使用引发的问题与解决
- Java 正则表达式匹配模式(贪婪型、勉强型、占有
- php自动加载autoload机制示例分享