SQL 資料庫分頁技術

2021-07-11 10:43:55 字數 3267 閱讀 8486

分頁方案一:(利用not in和select top分頁) 語句形式:

select top 10 * from testtable where (id not in (select top 20 id from testtable order by id)) order by id select top 頁大小

* from testtable where (id not in (select top 頁大小*頁數

id from 表 order by id)) order by id ------------------------------------- 

分頁方案二:(利用id大於多少和select top分頁) 語句形式:

select top 10 * from testtable where (id > (select max(id) from (select top 20 id from testtable order by id) as t)) order by id select top 頁大小 * from testtable where (id > (select max(id) from (select top 頁大小*頁數 id from 表 order by id) as t)) order by id ------------------------------------- 

分頁方案三:(利用sql的游標儲存過程分頁) create procedure xiaozhengge @sqlstr nvarchar(4000), --查詢字串 @currentpage int, --第n頁 @pagesize int --每頁行數 as set nocount on declare @p1 int, --p1是游標的id @rowcount int exec sp_cursoropen @p1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁 set @currentpage=(@currentpage-1)*@pagesize+1 exec sp_cursorfetch @p1,16,@currentpage,@pagesize exec sp_cursorclose @p1 set nocount off 

方案四createprocup_getpagen(@pagesizeint,@pagecurrentint)asbeginselect*from(selectrow_number()over(orderbyproductid) rownum,*fromproduction.product )orderdatawhererownumbetween(@pagecurrent-1)*@pagesize+1and@pagecurrent*@pagesizeorderbyproductidend

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。 建議優化的時候,加上主鍵和索引,查詢效率會提高。 通過sql 查詢分析器,顯示比較:我的結論是: 分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句 分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句 分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用

分頁方案一:(利用not in和select top分頁) 語句形式:

select top 10 * from testtable where (id not in (select top 20 id from testtable order by id)) order by id select top 頁大小

* from testtable where (id not in (select top 頁大小*頁數

id from 表 order by id)) order by id ------------------------------------- 

分頁方案二:(利用id大於多少和select top分頁) 語句形式:

select top 10 * from testtable where (id > (select max(id) from (select top 20 id from testtable order by id) as t)) order by id select top 頁大小 * from testtable where (id > (select max(id) from (select top 頁大小*頁數 id from 表 order by id) as t)) order by id ------------------------------------- 

分頁方案三:(利用sql的游標儲存過程分頁) create procedure xiaozhengge @sqlstr nvarchar(4000), --查詢字串 @currentpage int, --第n頁 @pagesize int --每頁行數 as set nocount on declare @p1 int, --p1是游標的id @rowcount int exec sp_cursoropen @p1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁 set @currentpage=(@currentpage-1)*@pagesize+1 exec sp_cursorfetch @p1,16,@currentpage,@pagesize exec sp_cursorclose @p1 set nocount off 

方案四createprocup_getpagen(@pagesizeint,@pagecurrentint)asbeginselect*from(selectrow_number()over(orderbyproductid) rownum,*fromproduction.product )orderdatawhererownumbetween(@pagecurrent-1)*@pagesize+1and@pagecurrent*@pagesizeorderbyproductidend

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。 建議優化的時候,加上主鍵和索引,查詢效率會提高。 通過sql 查詢分析器,顯示比較:我的結論是: 分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句 分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句 分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用

資料庫分頁技術

1 無order by排序的寫法。效率最高 經過測試,此方法成本最低,只巢狀一層,速度最快!即使查詢的資料量再大,也幾乎不受影響,速度依然!select from select rownum as rowno,t.from k task t where flight date between to ...

常用資料庫分頁技術

sql server資料庫 從資料庫表中的第m條記錄開始取n條記錄,利用top關鍵字 注意如果select語句中既有top,又有order by,則是從排序好的結果集中選擇 select from select top n from select top m n 1 from 表名稱 order b...

資料庫分頁查詢SQL

總結一下關於oracle和mysql的分頁查詢語句 mysql的分頁查詢是最簡單的,借助關鍵字limit即可實現查詢,查詢語句通式 oracle的分頁查詢方法相對來說要多點,主要介紹倆種查詢方式 rownum row number rownum查詢分頁通式 firstindex 起始索引 pages...