SQLServer中怎么實(shí)現(xiàn)高效分頁

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)SQL Server中怎么實(shí)現(xiàn)高效分頁,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

嘉魚網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

ROW_NUMBER的含義及語法定義

ROW_NUMBER實(shí)現(xiàn)對結(jié)果集的輸出進(jìn)行編號。 具體來說,返回結(jié)果集分區(qū)內(nèi)行的序列號,每個(gè)分區(qū)的***行從 1 開始。

ROW_NUMBER ( ) OVER ( [ PARTITION BY 字段 , ] order_by_clause )PARTITION BY:將 FROM 子句生成的結(jié)果集劃分為應(yīng)用 ROW_NUMBER 函數(shù)的分區(qū)。 value_expression 指定對結(jié)果集進(jìn)行分區(qū)所依據(jù)的列。 如果未指定 PARTITION BY,則此函數(shù)將查詢結(jié)果集的所有行視為單個(gè)組。order_by_clause: 子句可確定在特定分區(qū)中為行分配*** ROW_NUMBER 的順序。 order by 子句是必選項(xiàng)。返回值:bigint。結(jié)果集分區(qū)內(nèi)行的序列號。offset的含義及語法定義

offset是order by的子句,主要用來限定返回的行數(shù),用來做分頁也是很合適的。只是從MSSQL2012才開始支持。語法結(jié)構(gòu)如下:

FETCH { NEXT } { integer_constant | fetch_row_count_expression } { ROWS } ONLY

fetch_row_count_expression 可以是變量、參數(shù)或常量標(biāo)量子查詢。 在使用子查詢時(shí),它無法引用在外部查詢范圍中定義的任何列。也就是說,它無法與外部查詢相關(guān)聯(lián)。

結(jié)合到分頁,語法語法:

offset startPage rows fetch next pageSize rows only

其中起始頁面:startPage=(@page-1)*@rows,頁面大小:pageSize=@rows

演示數(shù)據(jù)準(zhǔn)備

為了說明方便,我們準(zhǔn)備一些演示數(shù)據(jù),這是一個(gè)簡單的業(yè)務(wù)銷售表,字段只有業(yè)務(wù)員、銷售區(qū)域和銷售額,如下:

declare @sale table( FName nvarchar(50), FDistrict nvarchar(50), FAmount decimal(28,10) ); insert into @sale values ('張三','北京',20000), ('張三','上海',50000), ('張三','深圳',40000), ('張三','廣州',30000), ('李四','北京',30000), ('李四','上海',50000), ('李四','深圳',40000), ('李四','廣州',10000), ('王二','北京',70000), ('王二','上海',10000), ('王二','深圳',60000), ('王二','廣州',20000), ('馬六','北京',80000), ('馬六','上海',20000), ('馬六','深圳',70000), ('馬六','廣州',60000)

SQL Server中怎么實(shí)現(xiàn)高效分頁

準(zhǔn)備演示數(shù)據(jù)

使用ROW_NUMBER分頁

比如我們希望按照業(yè)務(wù)員+銷售區(qū)域排序后,每4條記錄一頁顯示,寫法如下:

declare @pagesize int =4;--每頁記錄數(shù)  declare @pagenum int =1;--第幾頁  select v.* from (select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale) as v where v.FRowIndex between @pagesize*(@pagenum-1)+1 and @pagenum*@pagesize;

SQL Server中怎么實(shí)現(xiàn)高效分頁

分頁查詢

ROW_NUMBER函數(shù)在SQL中屬于熱名稱(即剛定的名稱FRowIndex),只可以出現(xiàn)在select子句中,需要放在子查詢中。也可以先對子查詢做好定義后面再直接引用,語法如下:

declare @pagesize int =4;--每頁記錄數(shù)  declare @pagenum int =1;--第幾頁  with saledata as ( select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale )  select * from saledata where FRowIndex between @pagesize*(@pagenum-1)+1 and @pagenum*@pagesize;

SQL Server中怎么實(shí)現(xiàn)高效分頁

分頁查詢

ROW_NUMBER來做分頁查詢,經(jīng)過反復(fù)應(yīng)用測試,效率還是很高的。完整的測試腳本參看下圖:

SQL Server中怎么實(shí)現(xiàn)高效分頁

使用OFFSET實(shí)現(xiàn)分頁

重復(fù)的代碼部分不再贅述,在查詢時(shí)要注意,offset是Order By的子句,不能獨(dú)立存在。語法結(jié)構(gòu)如下:

select * from @sale order by FName,FDistrict offset (@pagenum-1)*@pagesize rows fetch next @pagesize rows only

返回的結(jié)果與使用row_number是一致的。完整的測試腳本參看下圖:

SQL Server中怎么實(shí)現(xiàn)高效分頁

上述就是小編為大家分享的SQL Server中怎么實(shí)現(xiàn)高效分頁了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享標(biāo)題:SQLServer中怎么實(shí)現(xiàn)高效分頁
轉(zhuǎn)載源于:http://bm7419.com/article36/geihsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站、網(wǎng)站排名、微信小程序、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化