|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。分页|数据|显现CREATEPROCEDUREGetRecordFromPage
@tblNamevarchar(255),--表名
@fldNamevarchar(255),--字段名
@PageSizeint=10,--页尺寸
@PageIndexint=1,--页码
@IsCountbit=0,--前往纪录总数,非0值则前往
@OrderTypebit=0,--设置排序范例,非0值则降序
@strWherevarchar(1000)=--查询前提(注重:不要加where)
AS
declare@strSQLvarchar(6000)--主语句
declare@strTmpvarchar(100)--一时变量
declare@strOrdervarchar(400)--排序范例
if@OrderType!=0
begin
set@strTmp="<(selectmin"
set@strOrder="orderby["+@fldName+"]desc"
end
else
begin
set@strTmp=">(selectmax"
set@strOrder="orderby["+@fldName+"]asc"
end
set@strSQL="selecttop"+str(@PageSize)+"*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)+"*from["
+@tblName+"]where["+@fldName+"]"+@strTmp+"(["
+@fldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["
+@fldName+"]from["+@tblName+"]where"+@strWhere+""
+@strOrder+")astblTmp)and"+@strWhere+""+@strOrder
if@PageIndex=1
begin
set@strTmp=""
if@strWhere!=
set@strTmp="where"+@strWhere
set@strSQL="selecttop"+str(@PageSize)+"*from["
+@tblName+"]"+@strTmp+""+@strOrder
end
if@IsCount!=0
set@strSQL="selectcount(*)asTotalfrom["+@tblName+"]"
exec(@strSQL)
GO
修正后,便于利用的代码:
修正一点点便于其别人利用
CREATEPROCEDUREGetRecordFromPage
@tblNamevarchar(255),--表名
@fldNamevarchar(255),--字段名
@OrderfldNamevarchar(255),--排序字段名
@StatfldNamevarchar(255),--统计字段名
@PageSizeint=10,--页尺寸
@PageIndexint=1,--页码
@IsCountbit=0,--前往纪录总数,非0值则前往
@OrderTypebit=0,--设置排序范例,非0值则降序
@strWherevarchar(1000)=--查询前提(注重:不要加where)
AS
declare@strSQLvarchar(6000)--主语句
declare@strTmpvarchar(100)--一时变量
declare@strOrdervarchar(400)--排序范例
if@OrderType!=0
begin
set@strTmp="<(selectmin"
set@strOrder="orderby["+@OrderfldName+"]desc"
end
else
begin
set@strTmp=">(selectmax"
set@strOrder="orderby["+@OrderfldName+"]asc"
end
set@strSQL="selecttop"+str(@PageSize)+""+@fldName+"from["
+@tblName+"]where["+@OrderfldName+"]"+@strTmp+"(["
+@OrderfldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["
+@OrderfldName+"]from["+@tblName+"]"+@strOrder+")astblTmp)"
+@strOrder
if@strWhere!=
set@strSQL="selecttop"+str(@PageSize)+""+@fldName+"from["
+@tblName+"]where["+@OrderfldName+"]"+@strTmp+"(["
+@OrderfldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["
+@OrderfldName+"]from["+@tblName+"]where"+@strWhere+""
+@strOrder+")astblTmp)and"+@strWhere+""+@strOrder
if@PageIndex=1
begin
set@strTmp=""
if@strWhere!=
set@strTmp="where"+@strWhere
set@strSQL="selecttop"+str(@PageSize)+""+@fldName+"from["
+@tblName+"]"+@strTmp+""+@strOrder
end
if@IsCount!=0
set@strSQL="selectcount("+@StatfldName+")asTotalfrom["+@tblName+"]"
exec(@strSQL)
GO
申明:
增添了上面两个部分,其别人拷贝往可依据本人必要举行设定。
@OrderfldNamevarchar(255),--排序字段名
@StatfldNamevarchar(255),--统计字段名
fldName感化由排序变化为把持必要翻开的字段。
@fldNamevarchar(255),--字段名
----------------------------------------------
团体测试了局:
经由过程测试,功能并没有原帖子所说的好。但这多是呆板缘故原由,要晓得,在SQLServer中,2万万条空纪录约莫要占用3G摆布的空间,而拔出这2万万笔记录,在我的测试平台上泯灭了近10个小时,内存占用从125M增加到350M摆布。我实践测试了一下,在创建索引的情形下,实行一次依据主键,前往一笔记录的查询,在512M内存,2.2GCPU,20G单分区存储数据库文件,100M局域网的设置情形下,均匀约莫必要15s摆布(这只是我的团体测试,不具有任何本色性意义。)。
别的我发明,关于上述设置的呆板,运转SQLServer时,在百万级别以下的表中实行查询--(索引优秀,没有坏点,大概最新索引),速率不同不年夜,但到达8位数以上,也就是万万以上时分,SQLServer体现就不太好了,固然,这与呆板设置有很年夜干系了。但无能否认,SQLServer2000还不是企业级数据库的最好选择,在Oracle实行相似的查询,功能要好过SQLServer。拔出实行终了的工夫是4个小时,内存占用一向没有变更:400M。实行不异查询,必要的工夫是10s摆布。
小弟比来忙于一个公积金项目,关于部门数据库、中心数据库的调剂举行了一些评价,Oracle软件+SUN/HP的硬件仍旧占了中国当局机构服务器的年夜部分市场,再就是IBM,占有了高端和甚高真个年夜部分营业。
微软在这方面打个败仗,另有很长的路要走--团体以为,和硬件公司互助研发相配套硬件是不贰秘诀。提供TCP/IP、ODBC和JDBC等多种数据库连接路径。 |
|