повышаться в разы, по сравнению с обычным. По крайней мере, так происходит при выполнении в самой базе данных:
select * from table where a= :<parametr> выполняется намного быстрее(5-7 раз), чем "select * from table where a=" & "<parametr>"
В аналогичной ситуации на VB, ускорение получилось всего около 40%, в связи с чем появилась мысль: или я что-то неправильно
делаю или при выполнении в VB большая часть времени тратиться на передачу данных, открытие recordset`ов?
- Код: Выделить всё
Sub fastquery()
Dim c As Date
Dim cnn As New ADODB.Connection
Dim prm As New ADODB.Parameter
Set cmd = New ADODB.Command
cnn.Open "Provider=MSDAORA.1;Data Source=<db>;User id=<login>;Password=<psw>"
Set cmd.ActiveConnection = cnn
Set rs = New ADODB.Recordset
a = Time()
cmd.CommandText = "Select * from orders where order_num = ?"
cmd.CommandType = adCmdText
Set prm = cmd.CreateParameter("order_num", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Prepared = True
For i = 1 To10000
prm.Value = CStr(i)
rs.Open cmd 'правильно ли, что для каждого выполнения cmd нужно открывать и закрывать recordset?
Do While Not rs.EOF
tmp = CStr(Abs((rs!order_num * 10000) / (-9000) + 123456789) + Len(CStr(Abs((rs!amount * 10000) / (-9000) + 123456789)))) 'произвольная функция
rs.MoveNext
Loop
rs.Close
Next
b = Time()
c = b - a
MsgBox Format(c)
Set rs = Nothing
cnn.Close
Set cnn = Nothing
End Sub