mssql 高效的分頁存儲(chǔ)過程分享
最近在做一個(gè)幾百萬條數(shù)據(jù)的分頁查詢,研究了各種方案,在本機(jī)上用項(xiàng)目的實(shí)際數(shù)據(jù)庫做測試,測試過程 is very 痛苦,不堪回首ing?,F(xiàn)在廢話不多說,直接上結(jié)果,相信這也是大多數(shù)搜索答案的人最愿意看的方式。
以下是存儲(chǔ)過程的代碼:
CREATE PROCEDURE [dbo].[P_GridViewPager] (
@recordTotal INT OUTPUT, --輸出記錄總數(shù)
@viewName VARCHAR(800), --表名
@fieldName VARCHAR(800) = '*', --查詢字段
@keyName VARCHAR(200) = 'Id', --索引字段
@pageSize INT = 20, --每頁記錄數(shù)
@pageNo INT =1, --當(dāng)前頁
@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() --記錄時(shí)間
SET @beginRow = (@pageNo - 1) * @pageSize + 1
SET @endRow = @pageNo * @pageSize
SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)
--輸出參數(shù)為總記錄數(shù)
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
--主查詢返回結(jié)果集
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 耗時(shí)
set nocount off
END
GO
- 五種SQL Server分頁存儲(chǔ)過程的方法及性能比較
- SQL Server 分頁查詢通用存儲(chǔ)過程(只做分頁查詢用)
- sqlserver2005利用臨時(shí)表和@@RowCount提高分頁查詢存儲(chǔ)過程性能示例分享
- 深入sql server 2005 萬能分頁存儲(chǔ)過程的詳解
- 基于Sql Server通用分頁存儲(chǔ)過程的解決方法
- SQL Server 2005通用分頁存儲(chǔ)過程及多表聯(lián)接應(yīng)用
- MSSQL MySQL 數(shù)據(jù)庫分頁(存儲(chǔ)過程)
- 三種SQL分頁查詢的存儲(chǔ)過程代碼
- SQL通用存儲(chǔ)過程分頁,支持多表聯(lián)合
- SQL分頁查詢存儲(chǔ)過程代碼分享
相關(guān)文章
SQL?Server2019安裝的詳細(xì)步驟實(shí)戰(zhàn)記錄(親測可用)
SQL Server 2019作為編程人員必須使用到的一款數(shù)據(jù)庫管理軟件,許多初學(xué)者在安裝這款軟件的時(shí)候都出現(xiàn)了各種各樣的問題,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2019安裝的詳細(xì)步驟,需要的朋友可以參考下2022-06-06沒有sa密碼無法集成windows身份驗(yàn)證登錄的解決方法
以前都是通過windows集成身份驗(yàn)證登錄進(jìn)去的(sa密碼早忘記了),今天就改了服務(wù)器的機(jī)器名,現(xiàn)在無論如何都登錄不進(jìn)去,下面是解決方法2014-01-01SQLserver存儲(chǔ)過程寫法與設(shè)置定時(shí)執(zhí)行存儲(chǔ)過程方法詳解
一直都很想了解如何寫存儲(chǔ)過程,對(duì)于不熟悉的東西,總是覺得很神秘,下面這篇文章主要給大家介紹了關(guān)于SQLserver存儲(chǔ)過程寫法與設(shè)置定時(shí)執(zhí)行存儲(chǔ)過程方法的相關(guān)資料,需要的朋友可以參考下2023-03-03SQLServer 數(shù)據(jù)庫備份過程中經(jīng)常遇到的九種情況
SQLServer 數(shù)據(jù)庫備份過程中經(jīng)常遇到各種問題,大家可以參照下面的問題,來分析下,快速的解決問題。2009-07-07Windows Server2008 R2 MVC 環(huán)境安裝配置教程
這篇文章主要為大家詳細(xì)介紹了Windows Server2008 R2 MVC 環(huán)境安裝配置教程,感興趣的小伙伴們可以參考一下2016-09-09動(dòng)態(tài)給表添加刪除字段并同時(shí)修改它的插入更新存儲(chǔ)過程
有一個(gè)表,用戶需要在后臺(tái)操作它,希望能對(duì)它動(dòng)態(tài)進(jìn)行添加刪除字段2011-11-11在SQL Server數(shù)據(jù)庫中為標(biāo)識(shí)(IDENTITY)列插入顯式值
SQL Server中的標(biāo)識(shí)列和ACCESS中的“自動(dòng)編號(hào)”相似,都是插入記錄的時(shí)候自動(dòng)生成,一般不允許也不需要我們?nèi)ナ謩?dòng)修改它2007-02-02巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行
這篇文章主要介紹了巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行,需要的朋友可以參考下2014-08-08用SQL語句實(shí)現(xiàn)隨機(jī)查詢數(shù)據(jù)并不顯示錯(cuò)誤數(shù)據(jù)的方法
用SQL語句實(shí)現(xiàn)隨機(jī)查詢數(shù)據(jù)并不顯示錯(cuò)誤數(shù)據(jù)的方法...2007-11-11