2008年3月14日 星期五

利用ADO Command加速SQL的效率

當我們利用ADO物件執行SQL指令時,必須經過SQL的Compiler將指令編譯完才可以執行!如果
我們執行SQL的次速非常頻繁,那麼透過Command的prepared屬性可以將SQL指令事先編譯完成
,當我們每次執行SQL的時候就不需再編譯,以下為VB的範例程式碼。

範例:
Dim objConn as new ADODB.Connection
Dim objCmd as new ADODB.Command
Dim objRS as ADODB.ResultSet
Dim i as Integer
Dim strParam as String

objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;UserId=admin;" + _
"Password=;Data Source=NWIND.mdb;"
objConn.Open

'SQL指令未編譯
For i = 1 to 1000
strParam = "Genen Shouyu"
Set objRS = objConn.Execute("SELECT * FROM Products WHERE productname = '" + _ strParam + "'")
Next

'SQL指令事先編譯
objCmd.ActiveConnection = objConn
objCmd.CommandType = adCmdText
objCmd.CommandText = "SELECT * FROM Products WHERE productname = ?"
objCmd.Prepared = True
objCmd.Parameters.Append objCmd.CreateParameter(, adBSTR, adParamInput)
For i = 1 to 1000
objCmd.Parameters(0).Value = strParam
Set objRS = objCmd.Execute
Next

objConn.Close

SQL指令未經過編譯執行時間:3.755秒
SQL指令事先編譯執行時間:2.834秒

透過這個範例就可以看到兩者的差別!以這個資料庫的Products的資料為77筆,所以時間
不太明顯,如果資料上千筆或上萬筆將有可看出明顯差異,除了資料量外在UPDATE、
INSERT、DELETE也可以應用上去。

沒有留言: