分页存储过程性能比较 二分法_king_idea8848的博客-CSDN博客


本站和网页 https://blog.csdn.net/king_idea8848/article/details/4616117 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

分页存储过程性能比较 二分法_king_idea8848的博客-CSDN博客
分页存储过程性能比较 二分法
king_idea8848
于 2009-09-29 10:43:00 发布
683
收藏
分类专栏:
SQL 分页存储过程
文章标签:
存储
测试
sql
sql server
数据库
null
SQL 分页存储过程
专栏收录该内容
12 篇文章
0 订阅
订阅专栏
http://www.cnblogs.com/my6521/archive/2009/03/12/1409227.html
在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。
测试环境
硬件:CPU 酷睿双核T5750  内存:2G
软件:Windows server 2003    +   Sql server 2005
OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable
 1
create 
database
 data_Test  
--
创建数据库data_Test 
 2
GO
 3
use
 data_Test 
 4
GO
 5
create 
table
 tb_TestTable   
--
创建表 
 6

 7
    id 
int 
identity

primary 
key

 8
    userName 
nvarchar
20

not 
null

 9
    userPWD 
nvarchar
20

not 
null

10
    userEmail 
nvarchar
40

null
11

12
GO
然后我们在数据表中插入2000000条数据:
 1
--
插入数据 
 2
set 
identity_insert
 tb_TestTable 
on
 3
declare 
@count 
int
 4
set 
@count
=
 5
while 
@count
<=
2000000
 6
begin
  
 7
    
insert 
into
 tb_TestTable(id,userName,userPWD,userEmail) 
values
@count
admin
admin888
lli0077@yahoo.com.cn

 8
    
set 
@count
=
@count
+
 9
end
10
set 
identity_insert
 tb_TestTable 
off
我首先写了五个常用存储过程:
1,利用select top 和select not in进行分页,具体代码如下:
 1
create 
procedure
 proc_paged_with_notin  
--
利用select top and select not in 
 2

 3
    
@pageIndex 
int
,  
--
页索引 
 4
    
@pageSize 
int
    
--
每页记录数 
 5

 6
as
 7
begin
 8
    
set
 nocount 
on

 9
    
declare 
@timediff 
datetime 
--
耗时 
10
    
declare 
@sql 
nvarchar
500

11
    
select 
@timediff
=
Getdate
() 
12
    
set 
@sql
=
select top 
+
str
@pageSize
+
 * from tb_TestTable where(ID not in(select top 
+
str
@pageSize
@pageIndex
+
 id from tb_TestTable order by ID ASC)) order by ID
13
    
execute
@sql
)  
--
因select top后不支技直接接参数,所以写成了字符串@sql 
14
    
select 
datediff
(ms,
@timediff
GetDate
()) 
as
 耗时 
15
    
set
 nocount 
off

16
end
2,利用select top 和 select max(列键)
 1
create 
procedure
 proc_paged_with_selectMax  
--
利用select top and select max(列) 
 2

 3
    
@pageIndex 
int
,  
--
页索引 
 4
    
@pageSize 
int
    
--
页记录数 
 5

 6
as
 7
begin
 8
set
 nocount 
on

 9
    
declare 
@timediff 
datetime
10
    
declare 
@sql 
nvarchar
500

11
    
select 
@timediff
=
Getdate
() 
12
    
set 
@sql
=
select top 
+
str
@pageSize
+
 * From tb_TestTable where(ID>(select max(id) From (select top 
+
str
@pageSize
@pageIndex
+
 id From tb_TestTable order by ID) as TempTable)) order by ID
13
    
execute
@sql

14
    
select 
datediff
(ms,
@timediff
GetDate
()) 
as
 耗时 
15
set
 nocount 
off

16
end
3,利用select top和中间变量--此方法因网上有人说效果最佳,所以贴出来一同测试
 1
create 
procedure
 proc_paged_with_Midvar  
--
利用ID>最大ID值和中间变量 
 2

 3
    
@pageIndex 
int

 4
    
@pageSize 
int
 5

 6
as
 7
    
declare 
@count 
int
 8
    
declare 
@ID 
int
 9
    
declare 
@timediff 
datetime
10
    
declare 
@sql 
nvarchar
500

11
begin
12
set
 nocount 
on

13
    
select 
@count
=
@ID
=
@timediff
=
getdate
() 
14
    
select 
@count
=
@count
+
@ID
=
case 
when 
@count
<=
@pageSize
@pageIndex 
then
 ID 
else 
@ID 
end 
from
 tb_testTable 
order 
by
 id 
15
    
set 
@sql
=
select top 
+
str
@pageSize
+
 * from tb_testTable where ID>
+
str
@ID

16
    
execute
@sql

17
    
select 
datediff
(ms,
@timediff
getdate
()) 
as
 耗时 
18
set
 nocount 
off

19
end
20
4,利用Row_number() 此方法为SQL server 2005中新的方法,利用Row_number()给数据行加上索引
 1
create 
procedure
 proc_paged_with_Rownumber  
--
利用SQL 2005中的Row_number() 
 2

 3
    
@pageIndex 
int

 4
    
@pageSize 
int
 5

 6
as
 7
    
declare 
@timediff 
datetime
 8
begin
 9
set
 nocount 
on

10
    
select 
@timediff
=
getdate
() 
11
    
select 

from
 (
select 
,Row_number() 
over
order 
by
 ID 
asc

as
 IDRank 
from
 tb_testTable) 
as
 IDWithRowNumber 
where
 IDRank
@pageSize
@pageIndex 
and
 IDRank
@pageSize
@pageIndex
+

12
    
select 
datediff
(ms,
@timediff
getdate
()) 
as
 耗时 
13
set
 nocount 
off

14
end
15
5,利用临时表及Row_number
 1
create 
procedure
 proc_CTE  
--
利用临时表及Row_number 
 2

 3
    
@pageIndex 
int
,  
--
页索引 
 4
    
@pageSize 
int
    
--
页记录数 
 5

 6
as
 7
    
set
 nocount 
on

 8
    
declare 
@ctestr 
nvarchar
400

 9
    
declare 
@strSql 
nvarchar
400

10
    
declare 
@datediff 
datetime
11
begin
12
    
select 
@datediff
=
GetDate
() 
13
    
set 
@ctestr
=
with Table_CTE as 
14
                (select ceiling((Row_number() over(order by ID ASC))/
+
str
@pageSize
+
) as page_num,* from tb_TestTable)

15
    
set 
@strSql
=
@ctestr
+
 select * From Table_CTE where page_num=
+
str
@pageIndex

16
end
17
    
begin
18
        
execute
 sp_executesql 
@strSql
19
        
select 
datediff
(ms,
@datediff
GetDate
()) 
20
    
set
 nocount 
off

21
    
end
22
OK,至此,存储过程创建完毕,我们分别在每页10条数据的情况下在第2页,第1000页,第10000页,第100000页,第199999页进行测试,耗时单位:ms  每页测试5次取其平均值
存过第2页耗时第1000页耗时第10000页耗时第100000页耗时第199999页耗时效率排行1用not in0ms16ms47ms475ms953ms32用select max5ms16ms35ms325ms623ms13中间变量966ms970ms960ms945ms933ms54row_number0ms0ms34ms365ms710ms24临时表780ms796ms798ms780ms805ms4
测试结果显示:select max >row_number>not in>临时表>中间变量
于是我对效率最高的select max方法用2分法进行了扩展,代码取自互联网,我修改了ASC排序时取不到值的BUG,测试结果:
2分法156ms156ms180ms470ms156ms1*
从测试结果来看,使用2分法确实可以提高效率并使效率更为稳定,我又增加了第159999页的测试,用时仅296ms,效果相当的不错!
下面是2分法使用select max的代码,已相当完善。
  1
--
/*-----存储过程 分页处理 孙伟 2005-03-28创建 -------*/ 
  2
--
/*-----存储过程 分页处理 浪尘 2008-9-1修改----------*/ 
  3
--
/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/ 
  4
  5
alter 
PROCEDURE
 proc_paged_2part_selectMax 
  6

  7
@tblName
     
nvarchar
200
),        
--
--要显示的表或多个表的连接 
  8
@fldName
     
nvarchar
500


,    
--
--要显示的字段列表 
  9
@pageSize
    
int 

10
,        
--
--每页显示的记录个数 
 10
@page
        
int 

,        
--
--要显示那一页的记录 
 11
@fldSort
    
nvarchar
200


null
,    
--
--排序字段列表或条件 
 12
@Sort
        
bit 

,        
--
--排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ') 
 13
@strCondition
    
nvarchar
1000


null
,    
--
--查询条件,不需where 
 14
@ID
        
nvarchar
150
),        
--
--主表的主键 
 15
@Dist
                 
bit 

,           
--
--是否添加查询字段的 DISTINCT 默认0不添加/1添加 
 16
@pageCount
    
int 

 output,            
--
--查询结果分页后的总页数 
 17
@Counts
    
int 

 output                
--
--查询到的记录数 
 18

 19
AS
 20
SET
 NOCOUNT 
ON
 21
Declare 
@sqlTmp 
nvarchar
1000
)        
--
--存放动态生成的SQL语句 
 22
Declare 
@strTmp 
nvarchar
1000
)        
--
--存放取得查询结果总数的查询语句 
 23
Declare 
@strID
     
nvarchar
1000
)        
--
--存放取得查询开头或结尾ID的查询语句 
 24
 25
Declare 
@strSortType 
nvarchar
10
)    
--
--数据排序规则A 
 26
Declare 
@strFSortType 
nvarchar
10
)    
--
--数据排序规则B 
 27
 28
Declare 
@SqlSelect 
nvarchar
50
)         
--
--对含有DISTINCT的查询进行SQL构造 
 29
Declare 
@SqlCounts 
nvarchar
50
)          
--
--对含有DISTINCT的总数查询进行SQL构造 
 30
 31
declare 
@timediff 
datetime
  
--
耗时测试时间差 
 32
select 
@timediff
=
getdate
() 
 33
 34
if 
@Dist
  

 35
begin
 36
    
set 
@SqlSelect 

select 
 37
    
set 
@SqlCounts 

Count(*)
 38
end
 39
else
 40
begin
 41
    
set 
@SqlSelect 

select distinct 
 42
    
set 
@SqlCounts 

Count(DISTINCT 
+
@ID
+
 43
end
 44
 45
 46
if 
@Sort
=
 47
begin
 48
    
set 
@strFSortType
=
 ASC 
 49
    
set 
@strSortType
=
 DESC 
 50
end
 51
else
 52
begin
 53
    
set 
@strFSortType
=
 DESC 
 54
    
set 
@strSortType
=
 ASC 
 55
end
 56
 57
 58
 59
--
------生成查询语句-------- 
 60
--
此处@strTmp为取得查询结果数量的语句 
 61
if 
@strCondition 
is 
null 
or 
@strCondition
=
''
     
--
没有设置显示条件 
 62
begin
 63
    
set 
@sqlTmp 
=
  
@fldName 

 From 


@tblName
 64
    
set 
@strTmp 

@SqlSelect
+
 @Counts=
+
@SqlCounts
+
 FROM 
+
@tblName
 65
    
set 
@strID 

 From 


@tblName
 66
end
 67
else
 68
begin
 69
    
set 
@sqlTmp 


@fldName 

From 


@tblName 

 where (1>0) 


@strCondition
 70
    
set 
@strTmp 

@SqlSelect
+
 @Counts=
+
@SqlCounts
+
 FROM 
+
@tblName 

 where (1>0) 


@strCondition
 71
    
set 
@strID 

 From 


@tblName 

 where (1>0) 


@strCondition
 72
end
 73
 74
--
--取得查询结果总数量----- 
 75
exec
 sp_executesql 
@strTmp
,N
@Counts int out 
@Counts
 out 
 76
declare 
@tmpCounts 
int
 77
if 
@Counts 

 78
    
set 
@tmpCounts 

 79
else
 80
    
set 
@tmpCounts 

@Counts
 81
 82
    
--
取得分页总数 
 83
    
set 
@pageCount
=
@tmpCounts
+
@pageSize
@pageSize
 84
 85
    
/**/
/**当前页大于总页数 取最后一页**/
 86
    
if 
@page
@pageCount
 87
        
set 
@page
=
@pageCount
 88
 89
    
--
/*-----数据分页2分处理-------*/ 
 90
    
declare 
@pageIndex 
int 
--
总数/页大小 
 91
    
declare 
@lastcount 
int 
--
总数%页大小  
 92
 93
    
set 
@pageIndex 

@tmpCounts
@pageSize
 94
    
set 
@lastcount 

@tmpCounts
@pageSize
 95
    
if 
@lastcount 

 96
        
set 
@pageIndex 

@pageIndex 

 97
    
else
 98
        
set 
@lastcount 

@pagesize
 99
100
    
--
//***显示分页 
101
    
if 
@strCondition 
is 
null 
or 
@strCondition
=
''
     
--
没有设置显示条件 
102
    
begin
103
        
if 
@pageIndex

or 
@page
<=
@pageIndex 



@pageIndex 

   
--
前半部分数据处理 
104
            
begin
  
105
                
if 
@page
=
106
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
                         
107
                        
+
 order by 

@fldSort 
+


@strFSortType
108
                
else
109
                
begin
110
                    
if 
@Sort
=
111
                    
begin
                     
112
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
113
                        
+
 where 
+
@ID
+
 <(select min(

@ID 
+
) from (

@SqlSelect
+
 top 

CAST
@pageSize
@page

as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
114
                        
+
 order by 

@fldSort 
+


@strFSortType
+
) AS TBMinID)
115
                        
+
 order by 

@fldSort 
+


@strFSortType
116
                    
end
117
                    
else
118
                    
begin
119
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
120
                        
+
 where 
+
@ID
+
 >(select max(

@ID 
+
) from (

@SqlSelect
+
 top 

CAST
@pageSize
@page

as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
121
                        
+
 order by 

@fldSort 
+


@strFSortType
+
) AS TBMinID)
122
                        
+
 order by 

@fldSort 
+


@strFSortType
  
123
                    
end
124
                
end
     
125
            
end
126
        
else
127
            
begin
128
            
set 
@page 

@pageIndex
@page
+

--
后半部分数据处理 
129
                
if 
@page 
<= 

--
最后一页数据显示                 
130
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@lastcount 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
131
                        
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
  
132
                
else
133
                    
if 
@Sort
=
134
                    
begin
135
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
136
                        
+
 where 
+
@ID
+
 >(select max(

@ID 
+
) from(

@SqlSelect
+
 top 

CAST
@pageSize
@page
+
@lastcount 
as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
137
                        
+
 order by 

@fldSort 
+


@strSortType
+
) AS TBMaxID)
138
                        
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
139
                    
end
140
                    
else
141
                    
begin
142
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
143
                        
+
 where 
+
@ID
+
 <(select min(

@ID 
+
) from(

@SqlSelect
+
 top 

CAST
@pageSize
@page
+
@lastcount 
as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
144
                        
+
 order by 

@fldSort 
+


@strSortType
+
) AS TBMaxID)
145
                        
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
  
146
                    
end
147
            
end
148
    
end
149
150
    
else 
--
有查询条件 
151
    
begin
152
        
if 
@pageIndex

or 
@page
<=
@pageIndex 



@pageIndex 

   
--
前半部分数据处理 
153
        
begin
154
                
if 
@page
=
155
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
                         
156
                        
+
 where 1=1 


@strCondition 

 order by 

@fldSort 
+


@strFSortType
157
                
else 
if
@Sort
=

158
                
begin
                     
159
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
160
                        
+
 where 
+
@ID
+
 <(select min(

@ID 
+
) from (

@SqlSelect
+
 top 

CAST
@pageSize
@page

as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
161
                        
+
 where (1=1) 


@strCondition 
+
 order by 

@fldSort 
+


@strFSortType
+
) AS TBMinID)
162
                        
+


@strCondition 
+
 order by 

@fldSort 
+


@strFSortType
163
                
end
164
                
else
165
                
begin
166
                    
set 
@strTmp
=
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
167
                        
+
 where 
+
@ID
+
 >(select max(

@ID 
+
) from (

@SqlSelect
+
 top 

CAST
@pageSize
@page

as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
168
                        
+
 where (1=1) 


@strCondition 
+
 order by 

@fldSort 
+


@strFSortType
+
) AS TBMinID)
169
                        
+


@strCondition 
+
 order by 

@fldSort 
+


@strFSortType
  
170
                
end
            
171
        
end
172
        
else
173
        
begin
  
174
            
set 
@page 

@pageIndex
@page
+

--
后半部分数据处理 
175
            
if 
@page 
<= 

--
最后一页数据显示 
176
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@lastcount 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
177
                        
+
 where (1=1) 

@strCondition 
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
                      
178
            
else 
if
@Sort
=

179
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
180
                        
+
 where 
+
@ID
+
 >(select max(

@ID 
+
) from(

@SqlSelect
+
 top 

CAST
@pageSize
@page
+
@lastcount 
as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
181
                        
+
 where (1=1) 

@strCondition 
+
 order by 

@fldSort 
+


@strSortType
+
) AS TBMaxID)
182
                        
+


@strCondition
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
     
183
            
else
184
                    
set 
@strTmp
=
@SqlSelect
+
 * from (
+
@SqlSelect
+
 top 

CAST
@pageSize 
as 
VARCHAR
))
+


@fldName
+
 from 
+
@tblName
185
                        
+
 where 
+
@ID
+
 <(select min(

@ID 
+
) from(

@SqlSelect
+
 top 

CAST
@pageSize
@page
+
@lastcount 
as 
Varchar
20
)) 
+


@ID 
+
 from 
+
@tblName
186
                        
+
 where (1=1) 

@strCondition 
+
 order by 

@fldSort 
+


@strSortType
+
) AS TBMaxID)
187
                        
+


@strCondition
+
 order by 

@fldSort 
+


@strSortType
+
) AS TempTB
+
 order by 

@fldSort 
+


@strFSortType
             
188
        
end
     
189
    
end
190
191
--
----返回查询结果----- 
192
exec
 sp_executesql 
@strTmp
193
select 
datediff
(ms,
@timediff
getdate
()) 
as
 耗时 
194
--
print @strTmp 
195
SET
 NOCOUNT 
OFF
196
GO
197
执行示例:exec proc_paged_2part_selectMax 'tb_testTable','ID,userName,userPWD,userEmail',10,100000,'ID',0,null,'ID',0
这种测试只在单机进行,并且没有在实际开发WEB项目中分页测试,测试项也比较单一,所以不够全面系统,但从其效率相比上,我们可以在数据库分页算法上进行有效的控制。
Tag标签:
分页存储过程
king_idea8848
关注
关注
点赞
收藏
评论
分页存储过程性能比较 二分法
http://www.cnblogs.com/my6521/archive/2009/03/12/1409227.html在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。 测试环境硬件:CPU 酷睿双核T5750  内存:2G软件:Windows server 2003    +   Sql server 2005
复制链接
扫一扫
专栏目录
SQL SERVER 分页查询二分法
07-02
通常多表联查并且数据大时,分页查询时,会出现查询性能问题,查分页后面的数据,时间越久。但我们可以通过判断查询数据的总数据来进行相应的查询方式,从而保证性能。
理论第八课——binary_search
最新发布
zyxtjzys的博客
09-17
96
二分法检索(binary_search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组中,首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功;这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。二分法检索是一种效率较高的检索方法,要求字典在顺序表中按关键码排序。否则,若key小,则在字典前半部分中继续进行二分法检索;若key大,则在字典后半部分中继续进行二分法检索。这个函数可搭配理论第六课二分查找函数使用;
参与评论
您还未登录,请先
登录
后发表或查看评论
大数据量分页存储过程效率测试附代码
lli0077的专栏之 ASP.net(C#)
09-01
319
在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。 测试环境硬件:CPU 酷睿双核T5750 内存:2G软件:Windows server 2003 + Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTablecreat
MID驱动分析之一TP
suwenqiang2011的专栏
02-25
1332
决定自己去分析下我工作中会经常涉及到的几个驱动,暂定的有TP(义隆2127),G-SENSOR(bma150),CAMERA(GC0308),CODEC(es8328)这几个驱动吧,因为现在的LCD不需要驱动,而USB-wifi方面,并没有去公开源代码,采用的是直接加载KO文件,所以在USB设备驱动方面,只能更多的参考usb-Skeleton.c这个标准文件。
第一节我们分析的是TP的驱动,TP
存储过程二分法高效分页
大学IT网
07-24
498
1--/*-----存储过程 分页处理 孙伟 2005-03-28创建 -------*/
2--/*-----存储过程 分页处理 浪尘 2008-9-1修改----------*/
3--/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/
5alter PROCEDURE proc_paged_2p
ROW_NUMBER分页,性能并不见佳
醉梦流仙 专栏
04-04
4166
SQL Server 2005之后,令人困扰的分页问题似乎有了进展,那就是用ROW_NUMBER(),典型的语句如下SELECT * FROM(SELECT *,ROW_NUMBER() OVER (ORDER BY XXX) AS RowNo FROM tbl) AS AWHERE RowNo >= 11 and RowNo 但这里忽略了一个重要的问题,那就是中间那个SELECT语句,实际上
二分法的两种写法
热门推荐
公号:一条coding
07-24
1万+
1.循环写法
public static int rank(int key,int nums[])
//查找范围的上下界
int low=0;
int high=nums.length-1;
//未查找到的返回值
int notFind=-1;
while(low<=high)
//二分中点=数组左边界+(右边...
扩展Row_Number分页功能,二分思路。
逐日★风的草窝
12-07
2061
近期遇到了数据量比较大的多列排序处理,Top Max模式很难满足多列混合排序的情形,Row_number则可以,但是在末尾的分页效果已经不太如人意了,想了想二分法改造一下比较适合吧。本存储过程适合多列排序,通用,效率不如单纯的Top Max二分法,但是要配合多列排序,还是能够接受。 if exists(select name from sysobjects where type=p
MongoDB+大数据,几近完美
EntropyArrow的专栏
09-16
8957
Background
I joined Couchbase in December of 2013. However, I've been passionate about big data technology for years. I started writing about NoSQL in September of 2009 (link),
and I wrote about bi
http://hi.baidu.com/herowzz/blog/item/286e3c546eb23157574e0077.html
龍行者天空
06-17
858
dd
MongoDB + Spark: 完整的大数据解决方案
u010385646的专栏
09-30
1万+
原文链接
Spark介绍
按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎。
通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及用Mlib来执行机器学习等。Java,python,scala及R语言的支持也是其通用性的表现之一。快速: 这个可能是Spark成功的最初原因之一,主要归功于其基于
Oracle和MySQL分页查询SQL语句
PorUnaCabeza
04-05
1433
查询条件:查询数据库中test表第11到第20条数据
Oracle:
select * from (select test.*,rownum rownum_ from test where rownum =11
MySQL:
select * from test limit 10,10
注意:
limit关键字的用法:
LIMIT [offset,] rows
java 获取分页 二分法
若风
05-08
280
package com.bds.food.util;
import com.bds.base.http.HttpBase;
/**
* 实现对网页的 分页 采用二分查找法
* 这个方法通常在实在没办法的时候用
* @author zyh
* @date 2017年5月8日 上午11:36:27
*/
public class Paging {
/**
* 根据url判断 有多少
[转]SQL分页存储过程(not in模式、二分法实现)以及产生的问题
chyx72的博客
09-03
70
转:[url]http://www.itphome.cn/shujukuyingyong/mssql/2010-01-27/149.html[/url]
二分法分页模式是常规分页模式的改进,但是如果排序字段有重复值时(即不是primarykey)就很有可能出现第一页和第二页内容相同,解决办法是1。用传统的分页,即去掉二分法功能,在数据量小的情况下没有效率差异。2.尽量用primarykey作为排...
mysql亿级数据优化
ling的专栏
09-13
7589
第一阶段:
1,一定要正确设计索引
2,一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的 > < != 等等之类的写法都会导致全表扫描)
3,一定要避免 limit 10000000,20 这样的查询
4,一定要避免 LEFT JOIN 之类的查询,不把这样的逻辑处理交给数据库
5,每个表索引不要建太多,大数据时会增加数据库的写入压力
第二阶段:
1,采用分表技术(大表分小表)
Mongo 分页查询
leiting_imecas的博客
07-28
1481
分页说明
以典型的列表api来说:下拉刷新是获取最新信息,然后上拉加载下一页
常见api要写的2个接口
get_latest(model,count)get_with_page(number,size)
get_latest一般是取最新的数据,比如我们常见的下拉刷新,一般都是这样的接口的。由于2次下拉之间,可能非常长的时间间隔,所以取到的数据会把当前列表的数据冲掉。
目前来看较完美的通用二分法分页存储过程,not in模式,适用于非数值ID,可多字段排序,可以distinct——SQL Server...
weixin_30564901的博客
09-01
37
/*
通用二分法分页存储过程,水稻并不是很懂存储过程,这段procedure起初也并非原创,但原版总是有些小问题,无奈之下水稻只好自己从头到尾把代码重写一遍,终于改出了一个比较完美的版本,此版本支持多表连接(要在调用前自己join好),支持distinct(我发现多数分页存储过程都不能完美的支持distinct),支持多字段排序(需要自行准备与原始排序完全相反的排序列表,否则取不到真实的记录),...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
king_idea8848
CSDN认证博客专家
CSDN认证企业博客
码龄13年
暂无认证
原创
20万+
周排名
37万+
总排名
24万+
访问
等级
2737
积分
22
粉丝
获赞
17
评论
20
收藏
私信
关注
热门文章
《WCF技术内幕》翻译26:第2部分_第5章_消息:Buffered vs Streamed、序列化和反序列化消息
27543
邮件服务器常见问题
16106
常见邮件发送失败原因分析以及解决方法
9402
一个封锁操作被对WSACancelBlockingCall的调用中断
7320
WCF报错:通信对象XX无法用于通信,因为其处于“出错”状态。
6829
分类专栏
设计模式
1篇
数学
1篇
工具
4篇
技术跟踪
4篇
WCF
4篇
.NET
3篇
.NET 机制
3篇
.NET 高性能
.NET 多线程
7篇
.NET 导入
4篇
.NET 导出Excel
9篇
ADO.NET
2篇
JavaScript
JavaScript 机制
16篇
JavaScript 技巧
LINQ
2篇
SMTP
5篇
Socket
12篇
SQL
4篇
SQL 分页存储过程
12篇
SQL 技巧
10篇
SQL 机制
26篇
SQL 海量数据
6篇
SQL 海量数据 表分区和分表
20篇
SQL 海量数据 集群
7篇
Div+Css
1篇
WEB
WEB 机制
7篇
WEB 技巧
5篇
WEB 登录验证
2篇
WEB 泛解析
1篇
WEB 大型网站
10篇
Windows 系统
1篇
Windows 消息队列
9篇
Windows Service
1篇
最新评论
关于23种设计模式的有趣见解
山书生:
很很形象!!! :)
网站架构师
山书生:
如果说架构师是在模型图纸上工作的,那么模型元素必须是实实在在的,正如我们不可能期望抽象派画家来设计高楼大厦,没有实际意义的模型元素,是不可能构筑出软件系统的。……设计模式的出现是为缩短二者之间的鸿沟所做的努力,目的是让架构师和程序员之间有更多的共同语言和规范。……good!
一个封锁操作被对WSACancelBlockingCall的调用中断
hust_wsh
回复
sujingliunian:
在while(true)
if (tcpListener.Pending())
TcpClient client = tcpListener.AcceptTcpClient();
这里
一个封锁操作被对WSACancelBlockingCall的调用中断
sujingliunian:
先判断tcpListener.Pending() 在阻塞.
在哪里判断啊?各位大虾们~
全面剖析Oracle数据库中的分区功能
huawei2longtop:
不错哟~~谢谢分享
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
ExportData4Mssql
最快线程间数据交换算法,有效避免锁竞争 -- TwoQueues
WCF报错:通信对象XX无法用于通信,因为其处于“出错”状态。
2014年1篇
2013年1篇
2012年41篇
2011年1篇
2009年158篇
目录
目录
分类专栏
设计模式
1篇
数学
1篇
工具
4篇
技术跟踪
4篇
WCF
4篇
.NET
3篇
.NET 机制
3篇
.NET 高性能
.NET 多线程
7篇
.NET 导入
4篇
.NET 导出Excel
9篇
ADO.NET
2篇
JavaScript
JavaScript 机制
16篇
JavaScript 技巧
LINQ
2篇
SMTP
5篇
Socket
12篇
SQL
4篇
SQL 分页存储过程
12篇
SQL 技巧
10篇
SQL 机制
26篇
SQL 海量数据
6篇
SQL 海量数据 表分区和分表
20篇
SQL 海量数据 集群
7篇
Div+Css
1篇
WEB
WEB 机制
7篇
WEB 技巧
5篇
WEB 登录验证
2篇
WEB 泛解析
1篇
WEB 大型网站
10篇
Windows 系统
1篇
Windows 消息队列
9篇
Windows Service
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值