SQL資料分頁查詢的方法

2022-09-21 16:03:13 字數 1457 閱讀 5077

最近學習了一下sql的分頁查詢,總結了以下幾種方法。

首先建立了乙個表,隨意插入的一些測試資料,表結構和資料如下圖:

現在假設我們要做的是每頁5條資料,而現在我們要取第三頁的資料。(資料太少,就每頁5條了)

方法一:

select top 5 *

from [studb].[dbo].[scoreinfo]

where [sid] not in

(select top 10 [sid]

from [studb].[dbo].[scoreinfo]

order by [sid])

order by [sid]

結果:此方法是先取出前10條的sid(前兩頁),排除前10條資料的sid,然後在剩下的資料裡面取出前5條資料。

缺點就是它會遍歷表中所有資料兩次,資料量大時效能不好。

方法二:

select top 5 *

from [studb].[dbo].[scoreinfo]

where [sid]>

(select max(t.[sid]) from (select top 10 [sid] from [stu程式設計客棧db].[dbo].[scoreinfo] order by [siwww.cppcns.comd]) t )

order by [sid]

結果:此方法是先取出前10條資料的sid,然後取出sid的最大值,再從資料裡面取出 大於 前10條sid的最大值 的前5條資料。

缺點是效能比較差,和方法一大同小異。

方法三:

select *

from (selec *,row_number() over(order by [ row_id from [studb].[程式設計客棧dbo].[scoreinfo]) t

where t.[sid] between (5*(3-1)+1) and 5*3

結果:此方法的特點就是使用 row_number() 函式,這個方法效能比前兩種方法要好,只會遍歷一次所有的資料。適用於sql server 2000之後的版本(不含)。

方法四:

select *

from [studb].[dbo].[scoreinfo]

order by [sid]

offset 5*2 rows fetch next 5 rows only

結果:此方法適用於sql server 2008之後的版本(不含)。

offset 10 rows fetch next 5 rows only 這句**我的理解是:跳過前面10條資料(前2頁)從下一條開始取5條資料。

個人感覺這個方法比使用 row_number() 函式的方法要好(從**方面來看,**也少很多),至於效能方面沒有做過測試,就不說了。

不過,最後兩種方法的效能肯定是遠超前面兩種方法的,具體的還是看實用。

本文標題: sql資料分頁查詢的方法

本文位址:

SQL基礎 查詢資料 分頁查詢

使用select查詢時,如果結果集資料量很大,可以使用分頁顯示,每次顯示指定條數 語法limit offset 首先要確定每頁需要顯示的結果數量pagesize,然後根據當前頁的索引pageindex 從1開始 確定limit和offset應該設定的值。limit總是設定為pagesize offs...

SQL實現分頁查詢方法總結

開發過程中經常遇到分頁的需求,今天在此總結一下吧。簡單說來方法有兩種,一種在源上控制,一種在端上控制。源上控制把分頁邏輯放在sql層 端上控制一次性獲取所有資料,把分頁邏輯放在ui上 如gridview 顯然,端上控制開發難度低,適於小規模資料,但資料量增大時效能和io消耗無法接受 源上控制在效能和...

SQL分頁查詢

分頁sql查詢在程式設計的應用很多,主要有儲存過程分頁和sql分頁兩種,我比較喜歡用sql分頁,主要是很方便。為了提高查詢效率,應在排序欄位上加索引。sql分頁查詢的原理很簡單,比如你要查100條資料中的30 40條,你先查詢出前40條,再把這30條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...