分页存储过程性能比较 二分法_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
2
or
@page
<=
@pageIndex
/
2
+
@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
+
1
--
后半部分数据处理
129
if
@page
<=
1
--
最后一页数据显示
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
2
or
@page
<=
@pageIndex
/
2
+
@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
+
1
--
后半部分数据处理
175
if
@page
<=
1
--
最后一页数据显示
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币套餐、付费专栏及课程。
余额充值