三種SQL分頁方式

楊奇龍發表於2010-03-12


1.分頁方案一:(利用Not In和SELECT TOP分頁)

  語句形式:

SELECTTOP10*FROMTestTableWHERE(IDNOTIN     (SELECTTOP20id    FROMTestTable    ORDERBYid))ORDERBYIDSELECTTOP頁大小*FROMTestTableWHERE(IDNOTIN     (SELECTTOP頁大小*頁數id    FROM表    ORDERBYid))ORDERBYID

  2.分頁方案二:(利用ID大於多少和SELECT TOP分頁)

  語句形式:

  SELECTTOP10*FROMTestTableWHERE(ID>     (SELECTMAX(id)    FROM(SELECTTOP20id        FROMTestTable        ORDERBYid)AST))ORDERBYIDSELECTTOP頁大小*FROMTestTableWHERE(ID>     (SELECTMAX(id)    FROM(SELECTTOP頁大小*頁數id        FROM表        ORDERBYid)AST))ORDERBYID

  3.分頁方案三:(利用SQL的遊標儲存過程分頁)

create ),--查詢字串@currentpageint,--第N頁@pagesizeint--每頁行數是遊標的id@rowcountintexecsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutputselectceiling(1.0*@rowcount/@pagesize)as總頁數--,@rowcountas總行數,@currentpageas當前頁set@currentpage=(@currentpage-1)*@pagesize+1execsp_cursorfetch@P1,16,@currentpage,@pagesizeexecsp_cursorclose@P1setnocountoff

  其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。

  建議最佳化的時候,加上主鍵和索引,查詢效率會提高。

  透過SQL 查詢分析器,顯示比較:我的結論是:

  分頁方案二:(利用ID大於多少和SELECT TOP分頁)效率最高,需要拼接SQL語句,第一頁不可用 select top 0

  分頁方案一:(利用Not In和SELECT TOP分頁) 效率次之,需要拼接SQL語句

  分頁方案三:(利用SQL的遊標儲存過程分頁) 效率最差,但是最為通用

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-629331/,如需轉載,請註明出處,否則將追究法律責任。

相關文章