MSSQL网页编程之周全优化ADO
因此我们的方案中要构造这种逆操作。Event_type增加一种FLASHBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。ado|优化1Connection1.1Pooling
在WebApplication中,经常会呈现同时有良多用户同时会见数据库的情形,并且ASP中的工具感化域是页面级的,也就是
说,每一个页面都要连接和断开数据库,岂不是会很慢?并且每一个到SQLServer数据库的连接会带来37k的体系开支,怎样
办?
大概有人会想到用Application和Session来办理成绩,可是,这是不成取的,假如用Application,那末会呈现多个用户同时经由过程一个Connection会见数据库的情形,固然节俭了创建毗连的工夫,可是会见数据库的速率就会变得十分慢。假如用Session,呈现的成绩就是,Session超时怎样办?假如把Session.Timeout设得很年夜,那用户分开以后,毗连还会保存一段工夫,也会带来分外的开支。
实在基本不必思索这个成绩,经由过程OLEDB会见数据库,它会替你办理这个成绩,OLEDB有一个ResourcePooling,它会代
理你的毗连哀求,然后把他人刚用过的毗连给你接着用。(详细机制不再论述,实在我也没弄太分明,嘻嘻)
1.2Provider
大概没有几人用过这个Property吧,它的缺省值是MSDASQL,另有MSIDXS和ADSDSOObject,可是在ADO2.0(见VS98)和
ADO2.1(见SQL7)内里供应了一些新的Provider:
MSDAORA(OLEDBProviderforOracle)
Microsoft.Jet.OLEDB.3.51(OLEDBProviderforMicrosoftJet(forACCESS))
SQLOLEDB(MicrosoftSQLServerOLEDBProvider)
假如你所用的数据库是这些的话,用这些新的Provider就能够欠亨过ODBC而间接会见数据库,进步的效力便可想而知了。
2Command
2.1CommandType
缺省值是adCmdUnknown,ADO会逐一判别你的CommandType,直到它以为符合为止,不倡议接纳。(在Recordset.Open和
Connection.Execute的时分也能够用)
adCmdText是照原样实行你的SQL语句,可是假如你的SQLLanguage是以下几种的话,经由过程利用其余CommandType就能够进步
你的SQL语句实行效力
objCmd.Execute"Select*fromtable_name",adCmdText可交换为objCmd.Execute"table_name",adCmdTable
objCmd.Execute"Execproceuure_name",adCmdText可交换为objCmd.Execute"proceuure_name",adCmdStoredProc
另有很主要的一点就是,假如你的SQL语句没有前往纪录集,如insert和update等,那末利用adExecuteNoRecords
(ADO2.0)能够减低体系开支(能够加到adCmdText和adCmdStoredProc上,如adCmdStoredProc+adExecuteNoRecords)
另有adCmdTableDirect和adCmdFile(ADO2.0),我还不太分明怎样用,adCmdFile可用于会见一个XML文件。
2.2Prepared
假如你必要反复的实行相似的SQL语句,那末你能够预编译你的SQL语句,进步的效力也很可不雅
objCmd.CommandText="SELECTspellfromTYPER.wordspellwhereword=?"
objCmd.Prepared=True
objCmd.Parameters.AppendobjCmd.CreateParameter("word",adVarChar,,2)
Fori=1ToLen(strName)
strChar=Mid(strName,i,1)
objCmd("word")=strChar
SetobjRS=objCmd.Execute
IfobjRS.EOFThen
strNamesame=strNamesame&strChar
Else
strNamesame=strNamesame&objRS("spell")
EndIf
Nexti=1ToLen(strName)
3Recordset
3.1LockType
缺省是adLockReadOnly,假如你不必修正数据,就不要改成adLockOptimistic之类的,不然也会减低速率和增添开支的
adLockReadOnly>adLockPessimistic>adLockOptimistic>adLockBatchOptimistic
3.2CursorType
缺省是adOpenForwardOnly,假如你只用MoveNextMethod,也最好不要改,速率影响140%摆布
adOpenForwardOnly>adOpenDynamic>adOpenKeyset>adOpenStatic
3.3CursorLocation
缺省是adUseServer,实在欠好,它能够随时反应数据库服务器上的修改,可是体系开支很年夜,并且必要保持和数据库服务
器的毗连,可是在数据库服务器和WebServer在一同的时分要快些。不外在adLockOptimistic的时分使我没法利用
RecordCount等Property。
利用用adUseClient的话,你能够对数据做再排序,选择,shape等操纵
假如对数据的及时性没有请求的话,只管用adUseClient
4别的
4.1Earlybind
用ASP这一点就不必看了,假如用VB的话
DimobjConnAsADODB.Connection比SetobjConn=CreateObject("ADODB.Connection")要好
4.2ADO2.1里的shape真是好玩
4.3ADO2.1能够用objRS.Fields.Append来创建一个Recordset
4.4把Recordset的一列数据间接酿成一个数组来操纵速率快一些,可是体系开支要年夜一些
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 我们学到了什么?思考问题的时候从表的角度来思考问 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。 也可谈一下你是怎么优化存储过程的? 大家注意一点。如下面的例子: 无法深入到数据库系统层面去了解和探究
页:
[1]