九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【SQL】SQL分頁查詢總結

【SQL】SQL分頁查詢總結

    開發(fā)過程中經常遇到分頁的需求,今天在此總結一下吧。
    簡單說來方法有兩種,一種在源上控制,一種在端上控制。源上控制把分頁邏輯放在SQL層;端上控制一次性獲取所有數(shù)據(jù),把分頁邏輯放在UI上(如GridView)。顯然,端上控制開發(fā)難度低,適于小規(guī)模數(shù)據(jù),但數(shù)據(jù)量增大時性能和IO消耗無法接受;源上控制在性能和開發(fā)難度上較為平衡,適應大多數(shù)業(yè)務場景;除此之外,還可以根據(jù)客觀情況(性能要求,源與端的資源占用等)在源和端之間加一層,應用特殊算法和技術進行處理。以下主要討論源上,即SQL上的分頁。
    分頁的問題其實就是在滿足條件的一堆有序數(shù)據(jù)中截取當前所需要展示的那部分。實際上各種數(shù)據(jù)庫都考慮到分頁問題而內置了一些策略,比如MySql的LIMIT,Oracle的ROWNUM和ROW_NUMBER(),SqlServer的TOP和ROW_NUMBER(),基于此我們可以得到一系列分頁的方法。

1、 基于MySql的LIMIT和Oracle的ROWNUM,可以直接限制返回區(qū)間(以MySql為例,注意使用Oracle的ROWNUM時要應用子查詢):
方法一、直接限制返回區(qū)間

SELECT * FROM table WHERE 查詢條件 ORDER BY 排序條件 LIMIT ((頁碼-1)*頁大小),頁大小;

優(yōu)點:寫法簡單。
缺點:當頁碼和頁大小過大時,性能明顯下降。
適用:數(shù)據(jù)量不大。

2、基于LIMIT(MySql)、ROWNUM(Oracle)和TOP(SqlServer),他們可以限制返回的行數(shù),因此可以得到以下兩套通用的方法(以SqlServer為例):
方法二、NOT IN

SELECT TOP 頁大小 * FROM table WHERE 主鍵 NOT IN(    SELECT TOP (頁碼-1)*頁大小 主鍵 FROM table WHERE 查詢條件 ORDER BY 排序條件)ORDER BY 排序條件

優(yōu)點:通用性強。
缺點:當數(shù)據(jù)量較大時向后翻頁,NOT IN中的數(shù)據(jù)過大會影響性能。
適用:數(shù)據(jù)量不大。

方法三、MAX

SELECT TOP 頁大小 * FROM table WHERE 查詢條件 AND id >(    SELECT ISNULL(MAX(id),0) FROM     (        SELECT TOP ((頁碼-1)*頁大小) id FROM table WHERE 查詢條件 ORDER BY id     ) AS tempTable) ORDER BY id    

優(yōu)點:速度快,特別是當id為主鍵時。
缺點:適用面窄,要求排序條件單一且可比較。
適用:簡單排序(特殊情況也可嘗試轉換成類似可比較值處理)。

3、基于SqlServer和Oracle的ROW_NUMBER(),可以得到返回數(shù)據(jù)的行號,基于此在限制返回區(qū)間得到如下方法(以SqlServer為例):
方法四、ROW_NUMBER()

SELECT TOP 頁大小 * FROM (    SELECT TOP (頁碼*頁大小) ROW_NUMBER() OVER (ORDER BY 排序條件) AS RowNum, * FROM table WHERE 查詢條件) AS tempTableWHERE RowNum BETWEEN (頁碼-1)*頁大小+1 AND 頁碼*頁大小ORDER BY RowNum

優(yōu)點:在數(shù)據(jù)量較大時相比NOT IN有優(yōu)勢。
缺點:小數(shù)據(jù)量時不如NOT IN。
適用:大部分分頁查詢需求。

以上是自己總結的拙見,性能比較來自網上資料及個人判斷,并沒有深入實驗,不當之處請大家指正。

分類: SQL
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ORACLE中用ROWNUM分頁并排序的SQL語句
不同數(shù)據(jù)庫中查詢前幾條記錄的用法(SQL Server/Oracle/Postgresql)
Hibernate 實現(xiàn)分頁查詢
ORACLE分頁查詢SQL語法——最高效的分頁
Oracle分頁查詢語句
oracle與WEB分頁技術
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服