**
--插入測試資料200w條,可能會很久
create
table
student(
id int
primary
keyidentity(1
,1),name
nvarchar(50
),age
int)
insert
student(name,age)
values('
name',
18)while
(select
count(*
) from
student)
<
2000000
insert
student
select
name,age
from
student
--開始測試查詢
declare
@now
datetime
--max方案
select
'max'方案
select
@now
=getdate
()--
begin
select
top10
*from
student
where
id>
(select
max(id)
from
(select
top1999990
id from
student
order
byid)tt)
--end
declare
@maxdiff
intselect
@maxdiff
=datediff
(ms,
@now
,getdate
())--
top方案
select
'top'方案
select
@now
=getdate
()--
begin
select
top10
*from
student
where
id notin(
select
top1999990
id from
student)
--end
declare
@topdiff
intselect
@topdiff
=datediff
(ms,
@now
,getdate
())--
row方案
select
'row'方案
select
@now
=getdate
()--
begin
select
*from
(select
row_number()
over
(order
bytc)rn,
*from
(select
top2000000
0tc,
*from
student)t
)ttwhere
rn>
1999990
--end
declare
@rowdiff
intselect
@rowdiff
=datediff
(ms,
@now
,getdate
())--
row_number方案
select
'row_number'方案
select
@now
=getdate
()--
begin
select
*from
(select
top2000000
row_number()
over
(order
byid)rn,
*from
student
)twhere
rn>
1999990
--end
declare
@row_numberdiff
intselect
@row_numberdiff
=datediff
(ms,
@now
,getdate
())--
記錄結果
select
'第20萬頁
'頁碼,
@maxdiff
max方案,
@topdiff
top方案,
@rowdiff
row方案,
@row_numberdiff
row_number方案
比較了3種分頁方式,分別是max方案,top方案,row方案
效率:第1:row
第2:max
第3:top
缺點:max:必須使用者編寫複雜sql,不支援非唯一列排序
top:必須使用者編寫複雜sql,不支援復合主鍵
row:不支援sqlserver2000
SQL Server 2005 分頁儲存過程
支援 多表連線查詢 group by分組查詢等。多表連線查詢時請指定字段,不要用select 返回為一結果集,有乙個輸出引數為記錄總數,配合 aspnetpager控制項使用絕配。create procedure web pager rowstotal intoutput,輸出記錄總數 tablen...
sqlserver2005 分頁 SQL語句
1.分頁方案一 利用not in和select top分頁 語句形式 select top 10 from testtable where id not in select top20id from testtable order by id order by id select top 頁大小 f...
SQL Server 2005分頁儲存過程
剛開始學習分頁儲存過程的時候看到有很多長篇大論的 看起來很亂,現在有乙個很好的分頁儲存過程,分享一下 alter procedure dbo pr page helper top int null,返回前n位記錄 1 全部 ascordesc bit null,1 desc 0 asc column...