最近學習了一下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條倒序,再查出這倒序後的前十條,最後把這十條倒序就是...