SQL Server分頁大全及效率分析

2021-08-31 07:52:51 字數 1620 閱讀 6963

1.分頁方案一:(利用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

2.分頁方案二:(利用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

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

createprocedure sqlpager

@sqlstr nvarchar(4000), --查詢字串

@currentpage int, --第n頁

@pagesize int --每頁行數

asset 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

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

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

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

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句

分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句

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

SQL Server 約束大全

約束的作用 主要用來保證資料的正確性和完整性。sql server的主要約束有 主鍵約束 primary key constraint 唯一性約束 unique constraint 檢查性約束 check constraint 預設約束 default constraint 和外來鍵約束 fore...

SQL SERVER 語句大全

sql的簡單查詢例項教程 while not objrec.eof if objrec id rnumber then 這裡是執行指令碼 end if objrec.movenext wend 這很容易理解。首先,你取出1到500範圍之內的乙個隨機數 假設500就是資料庫內記錄的總數 然後,你遍歷每...

SQL Server 分頁查詢

ps,此文是純個人筆記 公司裡乙個專案裡用到了一種資料庫分頁查詢的方式 1 定義乙個臨時的table 這個table有乙個自增的之間id,和要查的資料表的主鍵id 2 再一次查詢,用id在分頁數段來and 一下結果 具體操作如下 定義個臨時表 temptable declare temptable ...