程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 全面優化ADO

全面優化ADO

編輯:關於MYSQL數據庫
1 Connection
1.1 Pooling
在Web Application中,常常會出現同時有很多用戶同時訪問數據庫的情況,而且ASP中的對象作用域是頁面級的,也就是
說,每個頁面都要聯接和斷開數據庫,豈不是會很慢?而且每個到SQL Server數據庫的聯接會帶來37k的系統開銷,怎麼
辦?
可能有人會想到用Application和Session來解決問題,但是,這是不可取的,如果用Application,那麼會出現多個用戶同
時通過一個Connection訪問數據庫的情況,雖然節省了建立連接的時間,但是訪問數據庫的速度就會變得非常慢。如果用
Session,出現的問題就是,Session超時怎麼辦?如果把Session.Timeout設得很大,那用戶離開之後,連接還會保留一段
時間,也會帶來額外的開銷。
其實根本不用考慮這個問題,通過OLE DB訪問數據庫,它會替你解決這個問題,OLE DB有一個Resource Pooling,它會代
理你的連接請求,然後把別人剛用過的連接給你接著用。(具體機制不再闡述,其實我也沒搞太明白,嘻嘻)
1.2 Provider
可能沒有多少人用過這個Property吧,它的缺省值是MSDASQL,還有MSIDXS和ADSDSOObject,但是在ADO2.0(見VS98)和
ADO2.1(見SQL7)裡面提供了一些新的Provider:
MSDAORA (OLE DB Provider for Oracle)
Microsoft.Jet.OLEDB.3.51(OLE DB Provider for Microsoft Jet( for Access))
SQLOLEDB(Microsoft SQL Server OLE DB Provider)
如果你所用的數據庫是這些的話,用這些新的Provider就可以不通過ODBC而直接訪問數據庫,提高的效率就可想而知了。
2 Command
2.1 CommandType
缺省值是adCmdUnknown,ADO會逐個判斷你的CommandType,直到它認為合適為止,不建議采用。(在Recordset.Open和
Connection.Execute的時候也可以用)
adCmdText是照原樣執行你的SQL語句,但是如果你的SQL Language是以下幾種的話,通過使用別的CommandType就可以提高
你的SQL語句執行效率
objCmd.Execute "Select * from table_name", adCmdText可替換為objCmd.Execute "table_name",adCmdTable
objCmd.Execute "Exec proceuure_name",adCmdText可替換為objCmd.Execute "proceuure _name", adCmdStoredProc
還有很重要的一點就是,如果你的SQL語句沒有返回記錄集,如insert和update等,那麼使用adExecuteNoRecords
(ADO2.0)可以減低系統開銷(可以加到adCmdText 和adCmdStoredProc上,如adCmdStoredProc + adExecuteNoRecords)
還有adCmdTableDirect和adCmdFile(ADO2.0),我還不太清楚怎麼用,adCmdFile可用於訪問一個XML文件。
2.2 Prepared
如果你需要重復的執行類似的SQL語句,那麼你可以預編譯你的SQL語句,提高的效率也很可觀
objCmd.CommandText = "SELECT spell from TYPER.wordspell where Word = ? "
objCmd.Prepared = True
objCmd.Parameters.Append objCmd.CreateParameter("Word", adVarChar, , 2)
For i = 1 To Len(strName)
strChar = Mid(strName, i, 1)
objCmd("Word") = strCh
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved