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
proceduresqlpager@sqlstrnvarchar(4000),--查詢字串@currentpageint,--第n頁@pagesizeint--每頁行數
assetnocountondeclare@p1int,--p1是游標的
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的游標儲存過程分頁) 效率最差,但是最為通用
sql三種分頁方式
表中主鍵必須為標識列,id int identity 1,1 1.分頁方案一 利用not in和select top分頁 語句形式 select top 10 from testtable where id not in select top 20 id from testtable order b...
Elasticsearch 三種分頁方式
淺 分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10 20的資料。這樣其實白白浪費了前10條的查詢。get test dev search size 10,from 20,sort id 其中,from定義了目標資料的偏移值,size定義當前返回的數...
Oracle分頁查詢三種方式
1.根據rowid來分 select from t xiaoxi where rowid in select rid from select rownum rn,rid from select rowid rid,cid from t xiaoxi order by cid desc where r...