|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。数据库模子的计划是不是公道会极年夜影响体系的利用功能。笔者根据多年来计划和利用数据库的履历,提出以下一些设
计准绳,供同仁们参考。
慎用游标(Cursor)
游标供应了对特定汇合中逐行扫描的手腕,一样平常利用游标来逐行遍历数据,依据掏出数据前提的分歧举行分歧的操
作。而关于多表和年夜表中界说的游标(年夜的数据汇合)轮回很简单使程序进进一个冗长的守候乃至逝世机,笔者在某市“住
房公积金办理体系”举行日终账户滚积数计息处置时,对一个10万个账户的游标处置时招致程序进进了一个无穷期的守候
(后经测算需48小时才干完成)(硬件情况:Alpha/4000128MBRAM,SCOUnix,Sybase11.0)。经修正程序并改用UPDATE
语句后,该处置历程得以在20分钟以内完成。示比方下:
DeclareMycursorcursorforselectcount―nofromCOUNT
OpenMycursor
FetchMycursorinto@vcount―no
While(@@sqlstatus=0)
Begin
If@vcount―no=′ ′前提1
操纵1
If@vcount―no=′ ′前提2
操纵2
...
FetchMycursorinto@vcount―no
End
...
改成
UpdateCOUNTset操纵1for前提1
UpdateCOUNTset操纵2for前提2
...
在某些必需利用游标的场所,可思索将切合前提的数据行转进一时表中,再对一时表界说游标举行操纵,如许,可以使
功能失掉分明进步。笔者在某地市“电信免费体系”数据库背景程序计划中,对一个表(3万行中切合前提的30多行数据)
举行游标操纵(硬件情况:PC服务器,PⅡ26664MBRAM,WindowsNT4.0MSSQLServer6.5)。
示比方下:
Create#tmp/*界说一时表*/
(字段1
字段2
...)
Insertinto#tmpselect*fromTOTALwhere前提
DeclareMycursorcursorforselect*from#tmp/*对一时表界说游标*/
...
索引(Index)的利用技能
创立索引一样平常有两个目标:保护被索引列的唯一性和供应疾速会见表中数据的战略。年夜型数据库有两种索引,即簇索
引和非簇索引,一个没有簇索引的表是按堆布局存储数据,一切的数据均增加在表的尾部;而创建了簇索引的表,其数据
在物理上会依照簇索引键的按次存储,一个表只同意有一个簇索引,因而,依据B树布局,能够了解增加任何一种索引均能
进步按索引列查询的速率,但与此同时会下降拔出、更新、删除操纵的功能,特别是当添补因子(FillFactor)较年夜时。
以是对索引较多的表举行频仍的拔出、更新、删除操纵时,建表和索引时应设置较小的添补因子,以便在各数据页中留下
较多的自在空间,削减页支解及从头构造的事情。
数据的分歧性和完全性
为了包管数据库的分歧性和完全性,计划职员常常会计划过量的表间联系关系(Relation),尽量地下降数据冗余。表
间联系关系是一种强迫性措施,创建后,对父表(ParentTable)和子表(ChildTable)的拔出、更新、删除操纵均要占用体系
的开支,别的,最好不要用Identify属性字段作为主键与子表联系关系。假如数据冗余低,数据的完全性简单失掉包管,但增
加了表间毗连查询的操纵。为了进步体系的呼应工夫,公道的数据冗余也是需要的。利用划定规矩(Rule)和束缚(Check)来
避免体系操纵职员误输出形成数据的毛病是,计划职员的另外一种经常使用手腕,可是,不用要的划定规矩和束缚也会占用体系的不
需要开支,必要注重的是,束缚对数据的无效性考证要比划定规矩快。一切这些,计划职员在计划阶段应依据体系操纵的类
型、频度加以平衡思索。
事件的圈套
事件是在一次性完成的一组操纵。固然这些操纵是单个的操纵,SQLServer可以包管这组操纵要末全体都完成,要末
一点儿都不做。恰是年夜型数据库的这一特征,使得数据的完全性失掉了极年夜的包管。
尽人皆知,SQLServer为每一个自力的SQL语句都供应了隐含的事件把持,使得每一个DML的数据操纵得以完全提交或回
滚,可是SQLServer还供应了显式事件把持语句,如:
BEGINTRANSACTION入手下手一个事件
COMMITTRANSACTION提交一个事件
ROLLBACKTRANSACTION回滚一个事件
事件能够嵌套,能够经由过程全局变量@@trancount检索到毗连的事件处置嵌套条理。要出格注重的是,每一个显现或隐含的
事物入手下手都使得该变量加1,每一个事件的提交使该变量减1,每一个事件的回滚城市使得该变量置0,而只要当该变量为0时的
事件提交(最初一个提交语句时),才把物理数据写进磁盘。
数据范例的选择
数据范例的公道选择关于数据库的功能和操纵具有很年夜的影响,有关这方面的书本也有很多的论述,笔者这里次要介
绍几点履历:
1.Identify字段不要作为表的主键与别的表联系关系,这将会影响到该表的数据迁徙。
2.Text和Image字段属指针型数据,次要用来寄存二进制年夜型工具(BLOB)。这类数据的操纵比拟别的数据范例较
慢,因而要避开利用。
3.日期型字段的长处是有浩瀚的日期函数撑持,因而,在日期的巨细对照、加减操纵上十分复杂。可是,在依照日期
作为前提的查询操纵也要用函数,比拟别的数据范例速率上就慢很多,由于用函数作为查询的前提时,服务器没法用先辈的
功能战略来优化查询而只能举行表扫描遍历每行。
ActiveServerPage技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。 |
|