新聞中心
隨著分頁(yè)被廣泛引入到網(wǎng)頁(yè)中,SQL server 分頁(yè)有著重要的地位。分頁(yè)可以顯示數(shù)據(jù)集中的一小部分,而不需要顯示整個(gè)數(shù)據(jù)集,這有助于減少通信量,提高性能和減輕服務(wù)器的負(fù)載。本文將介紹 SQL server 分頁(yè)前的行為準(zhǔn)備,SQL server 分頁(yè)的基本方法以及解決分頁(yè)中的性能問(wèn)題的一些技巧。

成都創(chuàng)新互聯(lián)公司主營(yíng)晉州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),晉州h5成都微信小程序搭建,晉州網(wǎng)站營(yíng)銷(xiāo)推廣歡迎晉州等地區(qū)企業(yè)咨詢(xún)
## 使用ROW_number 來(lái)實(shí)現(xiàn)
在開(kāi)始實(shí)現(xiàn) SQL Server 分頁(yè)之前,需要了解使用 [`ROW_NUMBER`](https://docs.microsoft.com/zh-cn/sql/t-sql/functions/row-number-transact-sql?view=sql-server-ver15) 來(lái)排序結(jié)果集。`ROW_NUMBER` 返回滿(mǎn)足指定條件的結(jié)果集中每一行的行號(hào)。例如,以下查詢(xún)使用 `ROW_NUMBER()` 將結(jié)果集按照 “name” 屬性進(jìn)行排序:
“`SQL
SELECT ROW_NUMBER() OVER(ORDER BY Name) RN,
Name
FROM Users;
該查詢(xún)返回的結(jié)果將按照 Name 屬性進(jìn)行排序,每一行都有一個(gè)用以標(biāo)識(shí)行號(hào)的 RN 列:
RN Name
1 John
2 Mary
3 Joe
4 Bill
通過(guò)使用 `ROW_NUMBER()` 函數(shù),可以實(shí)現(xiàn) SQL server 分頁(yè)。
## 分頁(yè)查詢(xún)
SQL server 中的分頁(yè)查詢(xún)是由 [`OFFSET`/`FETCH`](https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15) 子句實(shí)現(xiàn)的。例如:
SELECT Name
FROM Users
ORDER BY Name
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY
該查詢(xún)將從整個(gè)結(jié)果集的第 10 行開(kāi)始,獲取接下來(lái)的 5 行數(shù)據(jù):
Name
Joe
Mark
Paul
Tom
William
通過(guò)將 `ROW_NUMBER` 和 `OFFSET/FETCH` 結(jié)合起來(lái)應(yīng)用到 SQL Server 分頁(yè)查詢(xún):
SELECT Name
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY Name) RN,
Name
FROM Users
) AS T
WHERE RN BETWEEN 11 AND 15
將返回 `Joe`, `Mark`, `Paul`, `Tom`, `William` 這五行數(shù)據(jù)。
## 解決分頁(yè)查詢(xún)性能問(wèn)題
如果我們經(jīng)常使用分頁(yè)查詢(xún),可能會(huì)發(fā)現(xiàn)性能不是很好。此時(shí)可以考慮使用 [遞歸 CTE](https://docs.microsoft.com/zh-cn/sql/cte/cte-definition?view=sql-server-ver15) 來(lái)解決性能問(wèn)題。
先以上邊的分頁(yè)查詢(xún)?yōu)槔?,我們可以使用遞歸 CTE 來(lái)進(jìn)行改造:
```SQL
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY Name) RN,
Name
FROM Users
WHERE RN BETWEEN 11 AND 15
UNION ALL
SELECT ROW_NUMBER() OVER(ORDER BY Name) RN,
Name
FROM Users
WHERE RN
)
SELECT Name FROM CTE
通過(guò)將分頁(yè)查詢(xún)拆分成兩個(gè)獨(dú)立的查詢(xún),并將它們通過(guò) UNION ALL 組合在一起,可以有效地解決性能問(wèn)題。
本文介紹了如何實(shí)現(xiàn) SQL server 分頁(yè),以及如何解決分頁(yè)查詢(xún)中性能問(wèn)題的一些技巧,在使用分頁(yè)查詢(xún)時(shí)應(yīng)該嘗試上邊介紹的方法,以提高性能。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專(zhuān)注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶(hù)提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專(zhuān)注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線(xiàn)路電信、移動(dòng)、聯(lián)通等。
標(biāo)題名稱(chēng):SQLServer分頁(yè)操作指南(sqlserver怎么分頁(yè))
網(wǎng)頁(yè)地址:http://www.fisionsoft.com.cn/article/dpdddee.html


咨詢(xún)
建站咨詢(xún)
