SQLSERVER 高效分頁查詢

Sqlserver數據庫分頁查詢一直是Sqlserver的短板,閒來無事,想出幾種方法,假設有表ARTICLE,字段ID、YEAR...(其餘省略),數據53210條(客戶真實數據,量不大),分頁查詢每頁30條,查詢第1500頁(即第45001-45030條數據),字段ID彙集索引,YEAR無索引,Sqlserver版本:2008R2


第一種方案: sql

SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC


第二種方案:
SELECT * FROM (SELECT TOP 30 * FROM (SELECT TOP 45030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC) s ORDER BY s.YEAR DESC,s.ID DESC

第三種方案:
SELECT * FROM ARTICLE w1, (SELECT TOP 30 ID FROM (SELECT TOP 50030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC) w ORDER BY w.YEAR ASC, w.ID ASC) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC


第四種方案:
SELECT * FROM QKW_wenzhang w1 WHERE wenzhang_id in (SELECT top 30 wenzhang_id FROM (SELECT top 45030 wenzhang_id, nian FROM QKW_wenzhang ORDER BY nian DESC, wenzhang_id DESC) w ORDER BY w.nian ASC, w.wenzhang_id ASC) ORDER BY w1.nian DESC, w1.wenzhang_id DESC


第五種方案:
SELECT w2.n, w1.* FROM ARTICLE w1, (SELECT TOP 50030 row_number() OVER (ORDER BY YEAR DESC, ID DESC) n, ID FROM ARTICLE ) w2 WHERE w1.ID = w2.ID AND w2.n > 50000 ORDER BY w2.n ASC
相關文章
相關標籤/搜索