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

SQL Server 存儲(chǔ)過程的分頁方案比拼

系統(tǒng) 2153 0

轉(zhuǎn)自: http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx

1 SQLServer存儲(chǔ)過程的分頁,這個(gè)問題已經(jīng)討論過幾年了,很多朋友在問我,所以在此發(fā)表一下我的觀點(diǎn)
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 插入數(shù)據(jù):(2萬條,用更多的數(shù)據(jù)測試會(huì)明顯一些)
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 頁大小 * 頁數(shù)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 頁大小 * 頁數(shù)id
70 FROM
71 ORDER BY id) AS T))
72 ORDER BY ID
73
74
75 -- -----------------------------------
76
77 分頁方案三:(利用SQL的游標(biāo)存儲(chǔ)過程分頁)
78 create procedure XiaoZhengGe
79 @sqlstr nvarchar ( 4000 ), -- 查詢字符串
80 @currentpage int , -- 第N頁
81 @pagesize int -- 每頁行數(shù)
82 as
83 set nocount on
84 declare @P1 int , -- P1是游標(biāo)的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 總頁數(shù) -- ,@rowcountas總行數(shù),@currentpageas當(dāng)前頁
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 其它的方案:如果沒有主鍵,可以用臨時(shí)表,也可以用方案三做,但是效率會(huì)低。
94 建議優(yōu)化的時(shí)候,加上主鍵和索引,查詢效率會(huì)提高。
95
96 通過SQL查詢分析器,顯示比較:我的結(jié)論是:
97 分頁方案二:(利用ID大于多少和SELECTTOP分頁)效率最高,需要拼接SQL語句
98 分頁方案一:(利用NotIn和SELECTTOP分頁)效率次之,需要拼接SQL語句
99 分頁方案三:(利用SQL的游標(biāo)存儲(chǔ)過程分頁)效率最差,但是最為通用
100
101 在實(shí)際情況中,要具體分析。


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

轉(zhuǎn)自: http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx

SQL Server 存儲(chǔ)過程的分頁方案比拼


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品久久天干天天天按摩 | 国产一级成人毛片 | 精品视频在线一区 | 亚洲欧美色鬼久久综合 | 欧美色婷婷 | 天天操伊人| 国产高清美女一级a毛片久久w | 日日操美女 | 欧美在线xxx | 印度最a级毛片 | 日批视频网址免费观看 | 2022色婷婷综合久久久 | 一区二区三区不卡免费视频97 | 狠狠色综合久久婷婷色天使 | 五月色婷婷琪琪综合伊人 | 天天干夜夜做 | 亚洲午夜天堂 | 欧美操片在线观看 | 久久精品国产99国产精品亚洲 | 日本猛妇色xxxxx在线 | 国产小视频在线观看www | 草草影院第一页 | 国产高清自拍一区 | 日韩天堂视频 | 亚洲精品久久午夜香蕉 | 可以免费观看欧美一级毛片 | 国内免费一区二区三区视频 | 五月婷婷开心中文字幕 | free性欧美极度另类超级大 | 奇米影视7777777 | 亚洲国产精品久久 | 国产尤物在线播放 | 日韩一区二区精品久久高清 | 美女视频黄a视频免费全过程在线 | 久草视屏 | 伦理亚洲 | 四虎国产成人免费观看 | 亚洲第二页 | 亚洲免费一区 | 国产欧美日韩高清专区手机版 | 久久天天躁狠狠躁夜夜不卡 |