茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671888 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00109.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2023/5/17 8:24:30

T-SQL筆記15_三種分頁查詢寫法_避免Server壓力過大Loading等待太久(支援自SQL2000,2005,2012後)

 在網頁中通常做表格資料的呈現最怕就是資料量大到幾千筆甚至到萬筆查詢Loading過久,Server負荷不來的情況。

此時在網頁上通常會做一些分頁減輕查詢耗費資源與時間成本
(每頁一次查詢只先呈現10~20、30幾筆之類的分頁小批量查詢機制)
而不一次就要將上萬筆資料先全查出來,等loading轉圈圈1分鐘甚至到5~8分鐘過後網頁資料才出現。

有了上述的概念後接著就記錄一下常用到的透過SQL分頁查詢語法段落


這裡的目標結果TABLE可能會是一個join起來的table集合也可能是單一一個temp table
看實際應用情境

以我的情境是join的情況
我要套分頁機制的  目標結果Table
是來自於這段SQL

這裡pat_patNo為專利的流水編號

寫法1.用最硬解的SELECT TOP方式, 可支援SQL 2000的環境



 1
2
3
4
5
6
7
8
9
10

25
SELECT TOP @PageSize *
FROM
}
WHERE
( IN
({具唯一跟可排序性欄位}
}
條記錄
DESC





寫法2.透過ROW_NUMBER()搭配OVER(ORDER BY 特定某個具唯一性跟可排序性的Field)跟BETWEEN來實踐
備註:ROW_NUMBER()是 自SQL Server2005開始就適用

具體寫法模式



 1
2
3
4
5
6
7
8
9
10
11
12
13

25
FROM
(
SELECT
*, ROW_NUMBER() OVER (as RowId
FROM
}
WHERE
Conditions
) AS vw
WHERE
RowId AND @PageIndex * @PageSize




我們可以藉由設定每頁要呈現多少筆資料的PageSize跟第幾頁的頁碼達到一個分頁Shift的功能


寫法3.藉由OFFSET搭配FETCH
備註:OFFSET跟FETCH是 自SQL Server 2012後才有的機制,因此如有環境比較老舊的情境就不適用。



1
2
3
4
5
6
7
8

25
FROM
}
BY
ASC/DESC
ROWS
ONLY;

這裡套用後機制

















Ref:

筆記-T-SQL 分頁查詢並傳回總筆數


[SQL Server]幾種分頁(Paging)寫法

SQL Server 2012 :分頁處理:認識 OFFSET 和 FETCH 子句

[MSSQL] 4種SQL分頁方式

一條SQL語句搞定Sql2000 分頁

[MSSQL]分頁

原文出處:T-SQL筆記15_三種分頁查詢寫法_避免Server壓力過大Loading等待太久(支援自SQL2000,2005,2012後)
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|