есть БД MySql с ~500 000 записями, выбираю записи (то 1 до 1140 если есть..)
- Код: Выделить всё
...
tsql = " and `datetime` > '" & Format(tmn1, "YYYY-mm-dd hh:mm") & "' and `datetime` < '" & Format(tmn2, "YYYY-mm-dd hh:mm") & "' "
sql = "select * from PCSBD.works where `indexelement`= " & Index & tsql & " order by `datetime`"
Call RepMySqlOpen(sql)
If rsRepMySql.EOF = True And rsRepMySql.BOF = True Then
Exit Sub
Else
rsRepMySql.MoveFirst
End If
stopDate = lastTimeStop
startDate = lastTimeStart
sCount= 1 ' rsRepMySql.RecordCount
Do While rsRepMySql.EOF = False
sCount= sCount+ 1
rsRepMySql.MoveNext
Loop
rsRepMySql.MoveFirst
ReDim tt(i + 2)
ReDim tt7(i + 2)
ReDim rr(i + 2)
ReDim rr7(i + 2)
lsDte = 0
i = 0
y = 0
' rsRepMySql.MoveFirst
Do While rsRepMySql.EOF = False
zapusk(sCount) = 0
lmDate = rsRepMySql.Fields(5)
....
тут выолняю обработку данных
....
Loop
....
'подключение к базе данных
Public Sub RepMySqlOpen(ByRef sql As String, Optional CL As Boolean = False)
Dim tmperr As String
On Error GoTo er
If Len(sql) = 0 Then Exit Sub
sCn = "Driver={MySQL ODBC 3.51 Driver};Server=" & MySQLServerName & ";Database=" & MySQLDATABASEName & "; User=" & MySQLUesrName & ";Password=" & MySQLUesrPassword & ";Option=3;port=" & MySQLServerPort & ";"
Set cnRepMySql = New ADODB.Connection
Set rsRepMySql = New ADODB.Recordset
cnRepMySql.CursorLocation = adUseServer
cnRepMySql.CommandTimeout = 120
cnRepMySql.ConnectionTimeout = 120
cnRepMySql.Open sCn
With rsRepMySql
If CL Then .CursorLocation = adUseNone
.ActiveConnection = cnRepMySql
.LockType = adLockOptimistic
.CursorType = adOpenStatic
.Source = sql
.Open
End With
Exit Sub
er:
tmperr = Err.Description
SaveError "*RepMySqlOpen * err.Description= " & tmperr & " SQL=" & sql
Call AddLog(LogCritical, tmperr & ". Создана запись о ошибке в файле 'errors.log'")
End Sub
но при выполнении запроса программа "зависает" минуты на 2
если в базе удалить 400000-45000 записей то запрос выполняется за пару секунд
подскажите как можно оптимизировать код? и избавиться от "подвисания"
БД локальная (но может стоять и на удаленном сервере)