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

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

系統(tǒng) 1798 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 插入數(shù)據:(2萬條,用更多的數(shù)據測試會明顯一些)
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的游標存儲過程分頁)
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是游標的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當前頁
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條評論
主站蜘蛛池模板: 综合网伊人| 人人揉人人爽五月天视频 | 一本大道加勒比久久综合 | 国产系列在线播放 | 99精品久久| 久久国产精品高清一区二区三区 | 久久国产中文字幕 | 99青青| 猫咪视频成人永久免费观看 | 黄色片在线观看网址 | 国产自产在线 | 日本一本二本免费播放视频 | 欧美精品午夜 | 色四虎| 91九色蝌蚪91pornv在线 | 国产欧洲亚洲 | 一区二区三 | 一区二区在线 | 国内国产精品天干天干 | 亚洲一区二区三区精品国产 | 狠狠操狠狠 | 精品久久久久久久中文字幕 | 天天爱天天色天天干 | 亚洲欧美自拍另类图片色 | 国产一区二区三区亚洲综合 | 免费看一级欧美毛片视频 | 男人猛桶女人下面视频国产 | 在线小视频国产 | 狠狠色香婷婷久久亚洲精品 | 亚洲精品宾馆在线精品酒店 | 99久久一区二区精品 | 国内精品免费一区二区三区 | 日韩二区| 在线视频日韩精品 | 2023中文字幕在线观看 | 亚洲va国产日韩欧美精品色婷婷 | 国产精品久久久久久久9999 | 精品国产综合 | 日本aa在线观看 | 亚洲成人播放 | 久草久草在线 |