• 您現在的位置是:首頁 >綜合資訊 > 2022-11-09 13:34:18 來源:

    sql分頁查詢優化(sql分頁)

    導讀 大家好,小霞來為大家解答以上的問題。sql分頁查詢優化,sql分頁這個很多人還不知道,現在讓我們一起來看看吧!1、create?table?pagetest(i

    大家好,小霞來為大家解答以上的問題。sql分頁查詢優化,sql分頁這個很多人還不知道,現在讓我們一起來看看吧!

    1、create?table?pagetest(id?int?identity(1,1)?not?null,col01?int?null,col02?nvarchar(50)?null,col03?datetime?null)--分頁1,not?in/topselect?top?50?*?from?pagetestwhere?id?not?in?(select?top?9900?id?from?pagetest?order?by?id)order?by?id?--分頁2,not?existsselect?top?50?*?from?pagetestwhere?not?exists(select?1?from?(select?top?9900?id?from?pagetest?order?by?id)a??where?a.id=pagetest.id)order?by?id?--寫法3,max/topselect?top?50?*?from?pagetestwhere?id>(select?max(id)?from?(select?top?9900?id?from?pagetest?order?by?id)a)order?by?id?--分頁4,row_number()select?top?50?*?from(select?row_number()over(order?by?id)rownumber,*?from?pagetest)awhere?rownumber>9900?select?*?from(select?row_number()over(order?by?id)rownumber,*?from?pagetest)awhere?rownumber>9900?and?rownumber<9951?select?*?from(select?row_number()over(order?by?id)rownumber,*?from?pagetest)awhere?rownumber?between?9901?and?9950?--分頁5,在csdn上一帖子看到的,row_number()?變體,不基于已有字段產生記錄序號,先按條件篩選以及排好序,再在結果集上給一常量列用于產生記錄序號select?*from?(????select?row_number()over(order?by?tempColumn)rownumber,*????from?(select?top?9950?tempColumn=0,*?from?pagetest?where?1=1?order?by?id)a)bwhere?rownumber>9900結論:1.max/top,ROW_NUMBER()都是比較不錯的分頁方法。

    2、相比ROW_NUMBER()只支持sql2005及以上版本,max/top有更好的可移植性,能同時適用于sql2000,access。

    3、2.not exists感覺是要比not in效率高一點點。

    4、3.ROW_NUMBER()的3種不同寫法效率看起來差不多。

    5、4.ROW_NUMBER() 的變體基于這個測試效率實在不好。

    本文到此分享完畢,希望對大家有所幫助。

  • 成人app