亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server 存儲過程的分頁方案比拼

系統(tǒng) 2092 0

轉自: http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx

1 SQLServer存儲過程的分頁,這個問題已經討論過幾年了,很多朋友在問我,所以在此發(fā)表一下我的觀點
2 建立表:
3
4 CREATE TABLE [ TestTable ] (
5 [ ID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,
6 [ FirstName ] [ nvarchar ] ( 100 )COLLATEChinese_PRC_CI_AS NULL ,
7 [ LastName ] [ nvarchar ] ( 100 )COLLATEChinese_PRC_CI_AS NULL ,
8 [ Country ] [ nvarchar ] ( 50 )COLLATEChinese_PRC_CI_AS NULL ,
9 [ Note ] [ nvarchar ] ( 2000 )COLLATEChinese_PRC_CI_AS NULL
10 ) ON [ PRIMARY ]
11 GO
12
13
14
15 插入數據:(2萬條,用更多的數據測試會明顯一些)
16 SET IDENTITY_INSERT TestTable ON
17
18 declare @i int
19 set @i = 1
20 while @i <= 20000
21 begin
22 insert into TestTable( [ id ] ,FirstName,LastName,Country,Note) values ( @i , ' FirstName_XXX ' , ' LastName_XXX ' , ' Country_XXX ' , ' Note_XXX ' )
23 set @i = @i + 1
24 end
25
26 SET IDENTITY_INSERT TestTable OFF
27
28
29
30 -- -----------------------------------
31
32 分頁方案一:(利用NotIn和SELECTTOP分頁)
33 語句形式:
34 SELECT TOP 10 *
35 FROM TestTable
36 WHERE (ID NOT IN
37 ( SELECT TOP 20 id
38 FROM TestTable
39 ORDER BY id))
40 ORDER BY ID
41
42
43 SELECT TOP 頁大小 *
44 FROM TestTable
45 WHERE (ID NOT IN
46 ( SELECT TOP 頁大小 * 頁數id
47 FROM
48 ORDER BY id))
49 ORDER BY ID
50
51 -- -----------------------------------
52
53 分頁方案二:(利用ID大于多少和SELECTTOP分頁)
54 語句形式:
55 SELECT TOP 10 *
56 FROM TestTable
57 WHERE (ID >
58 ( SELECT MAX (id)
59 FROM ( SELECT TOP 20 id
60 FROM TestTable
61 ORDER BY id) AS T))
62 ORDER BY ID
63
64
65 SELECT TOP 頁大小 *
66 FROM TestTable
67 WHERE (ID >
68 ( SELECT MAX (id)
69 FROM ( SELECT TOP 頁大小 * 頁數id
70 FROM
71 ORDER BY id) AS T))
72 ORDER BY ID
73
74
75 -- -----------------------------------
76
77 分頁方案三:(利用SQL的游標存儲過程分頁)
78 create procedure XiaoZhengGe
79 @sqlstr nvarchar ( 4000 ), -- 查詢字符串
80 @currentpage int , -- 第N頁
81 @pagesize int -- 每頁行數
82 as
83 set nocount on
84 declare @P1 int , -- P1是游標的id
85 @rowcount int
86 exec sp_cursoropen @P1 output, @sqlstr , @scrollopt = 1 , @ccopt = 1 , @rowcount = @rowcount output
87 select ceiling ( 1.0 * @rowcount / @pagesize ) as 總頁數 -- ,@rowcountas總行數,@currentpageas當前頁
88 set @currentpage = ( @currentpage - 1 ) * @pagesize + 1
89 exec sp_cursorfetch @P1 , 16 , @currentpage , @pagesize
90 exec sp_cursorclose @P1
91 set nocount off
92
93 其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
94 建議優(yōu)化的時候,加上主鍵和索引,查詢效率會提高。
95
96 通過SQL查詢分析器,顯示比較:我的結論是:
97 分頁方案二:(利用ID大于多少和SELECTTOP分頁)效率最高,需要拼接SQL語句
98 分頁方案一:(利用NotIn和SELECTTOP分頁)效率次之,需要拼接SQL語句
99 分頁方案三:(利用SQL的游標存儲過程分頁)效率最差,但是最為通用
100
101 在實際情況中,要具體分析。


更多的討論見:
http://community.csdn.net/Expert/topic/3292/3292678.xml?temp=.1621515

轉自: http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx

SQL Server 存儲過程的分頁方案比拼


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠色丁香婷婷综合欧美 | 国产成人综合95精品视频免费 | 国产精品最新 | 国产成人精品免费视频大全五级 | 国产特级毛片aaaaaaa高清 | 四虎影视884a精品国产古代 | 久久天堂夜夜一本婷婷麻豆 | 奇米影视7777777| 草草免费观看视频在线 | 四虎久久精品国产 | 欧美中文字幕一区 | 精品国产福利在线 | 真人视频一级毛片 | 久久精品首页 | 国内精品福利视频 | 国产成年女一区二区三区 | 日韩一级在线视频 | 久久草视频在线 | 中文字幕在线观看免费视频 | 337p色噜噜| 久久这里只有 | 亚洲精品99久久久久久 | 在线手机福利免费福利院 | 91在线视频免费91 | 中文字幕一区精品 | 亚洲高清色 | 成人久久久久 | 欧美日韩国产人成在线观看 | a视频在线播放 | 久久精品中文字幕免费 | 91久久亚洲国产成人精品性色 | 96精品专区国产在线观看高清 | 色综合中文字幕 | 四虎tv| 成人在线观看一区 | 亚洲精品永久一区 | 久草在线这里只有精品 | 婷婷在线观看网站 | 日韩视频网址 | 奇米影视222 | 久草最新在线 |