SQL SERVER2005高效分頁查詢

2021-09-01 17:23:57 字數 1764 閱讀 9604

sqlserver2005不支援關鍵字limit ,所以它的分頁sql查詢語句將不能用mysql的方式進行,幸好sqlserver2005提供了top,rownumber等關鍵字,這樣就能通過這幾個關鍵字實現分頁。

幾種sqlserver2005高效分頁sql查詢語句

top方案:

select top 10 * from table1

where id not in(select top 開始的位置 id from table1)

select top 10 * from table1

where id>(select max(id)

from (select top 開始位置 id from table1order by id)tt)

row:

select * from (

select row_number()over(order by tempcolumn)temprownumber,*

from (select top 開始位置+10 tempcolumn=0,* from table1)t

)tt where temprownumber>開始位置

3種分頁方式,分別是max方案,top方案,row方案

效率:

第1:row

第2:max

第3:top

缺點:

max:必須使用者編寫複雜sql,不支援非唯一列排序

top:必須使用者編寫複雜sql,不支援復合主鍵

row:不支援sqlserver2000

測試資料:

共320萬條資料,每頁顯示10條資料,分別測試了2萬頁、15萬頁和32萬頁。

頁碼,top方案,max方案,row方案

2萬,60ms,46ms,33ms

15萬,453ms,343ms,310ms

32萬,953ms,720ms,686ms

是一種通過程式拼接sql語句的分頁方案,

使用者提過的sql語句不需要編寫複雜的sql邏輯

諾使用者提供sql如下

select * from table1

從第5條開始,查詢5條,處理後sql變為

select * from (

select row_number()over(order by tempcolumn)temprownumber,*

from (select top 10 tempcolumn=0,* from table1)t

)tt where temprownumber>5

這是什麼意思呢?分解一下

首先將使用者輸入的sql語句轉稍稍修改

在select後新增top 開始位置+條數變成

再外加一列tempcolum,變成這樣

select top 20 tempcolumn=0,* from clazz
select row_number()over(order by tempcolumn)temprownumber,*

from (修改過的查詢)t

再套一層,過濾掉行號小於開始位置的行

select * from (第二層)tt where temprownumber>10

SQL Server2005複製實現

一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...

SQL Server 2005完全解除安裝

sql server 2005的解除安裝是乙個非常頭疼的問題。我曾經嘗試過直接使用 新增或刪除程式 工具解除安裝 清除安裝目錄 刪除登錄檔內容等等各種方式綜合解除安裝,勉強成功。現在終於找到了乙個事半功倍的方法,多次嘗試,未有失敗,具體如下 第一種是微軟官方提供的工具 msicuu2.exe 微軟官...

SQLSERVER 2005 遞迴查詢

專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...