上面,我们交往数据库中增加1000万条数据:
declare@iint
set@i=1
while@i<=250000
begin
insertintoTgongwen(fariqi,neibuyonghu,reader,title)values(2004-2-5,通讯科,通讯科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科,这是开始的25万笔记录)
set@i=@i+1
end
GO
declare@iint
set@i=1
while@i<=250000
begin
insertintoTgongwen(fariqi,neibuyonghu,reader,title)values(2004-9-16,办公室,办公室,通讯科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科,这是两头的25万笔记录)
set@i=@i+1
end
GO
declare@hint
set@h=1
while@h<=100
begin
declare@iint
set@i=2002
while@i<=2003
begin
declare@jint
set@j=0
while@j<50
begin
declare@kint
set@k=0
while@k<50
begin
insertintoTgongwen(fariqi,neibuyonghu,reader,title)values(cast(@iasvarchar(4))+-8-153:+cast(@jasvarchar(2))+:+cast(@jasvarchar(2)),通讯科,办公室,通讯科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科,这是最初的50万笔记录)
set@k=@k+1
end
set@j=@j+1
end
set@i=@i+1
end
set@h=@h+1
end
GO
declare@iint
set@i=1
while@i<=9000000
begin
insertintoTgongwen(fariqi,neibuyonghu,reader,title)values(2004-5-5,通讯科,通讯科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科,这是最初增加的900万笔记录)
set@i=@i+1000000
end
GO
经由过程以上语句,我们创立了25万条由通讯科于2004年2月5日公布的纪录,25万条由办公室于2004年9月6日公布的纪录,2002年和2003年各100个2500条不异日期、分歧分秒的由通讯科公布的纪录(共50万条),另有由通讯科于2004年5月5日公布的900万笔记录,算计1000万条。
if@doCount!=0
begin
if@strWhere!=
set@strSQL="selectcount(*)asTotalfrom["+@tblName+"]where"+@strWhere
else
set@strSQL="selectcount(*)asTotalfrom["+@tblName+"]"
end
--以上代码的意义是假如@doCount传送过去的不是0,就实行总数统计。以下的一切代码都是@doCount为0的情形
else
begin
if@OrderType!=0
begin
set@strTmp="<(selectmin"
set@strOrder="orderby["+@fldName+"]desc"
--假如@OrderType不是0,就实行降序,这句很主要!
end
else
begin
set@strTmp=">(selectmax"
set@strOrder="orderby["+@fldName+"]asc"
end
if@PageIndex=1
begin
if@strWhere!=
set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["+@tblName+"]where"+@strWhere+""+@strOrder
else
set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["+@tblName+"]"+@strOrder
--假如是第一页就实行以上代码,如许会加速实行速率
end
else
begin
--以下代码付与了@strSQL以真正实行的SQL代码
set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["
+@tblName+"]where["+@fldName+"]"+@strTmp+"(["+@fldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["+@fldName+"]from["+@tblName+"]"+@strOrder+")astblTmp)"+@strOrder
if@strWhere!=
set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["
+@tblName+"]where["+@fldName+"]"+@strTmp+"(["
+@fldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["
+@fldName+"]from["+@tblName+"]where"+@strWhere+""
+@strOrder+")astblTmp)and"+@strWhere+""+@strOrder
end
end
exec(@strSQL)
GO
下面的这个存储历程是一个通用的存储历程,其正文已写在个中了。
在年夜数据量的情形下,出格是在查询最初几页的时分,查询工夫一样平常不会凌驾9秒;而用其他存储历程,在理论中就会招致超时,以是这个存储历程十分合用于年夜容量数据库的查询。
笔者但愿可以经由过程对以上存储历程的剖析,能给人人带来必定的启发,并给事情带来必定的效力提拔,同时但愿偕行提出更优异的及时数据分页算法。