三種SQL分頁法傚率分析
表中的主鍵必須是標識列,[ID] int IDENTITY (1,1)
1.尋呼方案1:(按不在和選擇尋呼)
聲明形式:
select 10 *
FROM test table
where(idno tin
(select 20 id
FROM test table
order byid
select page size *
test table
where(idno tin
(select page size * page id
,FROM table
order byid))
order byid
2.尋呼方案2:(ID大於且選擇的尋呼)
聲明形式:
SELECT 10 *
FROM test table
WHERE(ID >
(SELECT max(ID)
FROM(SELECT 20 ID
FROM test table
order byid]AST)]
order byid
SELECT page size *
FROM test table
WHERE(ID >
(SELECT max(ID)
FROM(SELECT page size * page ID
FROM
3.分頁方案3:(使用SQL的遊標存儲過程分頁)
create procedure SQL pager
@ sqlstrnvarchar(4000),-query string
@ current pagent,-page n
@ pagesizeint-rows per page
as
setno counton
declare @ p1int,-P1是遊標的ID
@ rowcount int
execsp _ cursoropen @ @ scrollopt = 1,@ ccopt = 1,@ rowcount = @ rowcount output @ currentpage as current page
set @ current page =(@ current page-1)* @ pagesize 1
execsp _ cursor fetch @ P1,16,@ current page,@ pagesize
execsp _ cursor close @ P1[/br/
其他方案:如果沒有主鍵,可以使用臨時表或者第三種方案,但是傚率會低。
優化時,添加主鍵和索引會提高查詢傚率。
通過SQL查詢分析器,展示比較:我的結論是:
分頁方案二:(使用ID大於和選擇分頁)傚率需要拼接SQL語句。
分頁方案一:(按Not In和SELECT分頁)第二高傚,需要拼接SQL語句。
分頁方案3:(使用SQL的遊標存儲過程分頁)傚率最低,但最常用
0條評論