У меня есть функция, которую я вызываю для извлечения записей определенных полей:
Public Function fun_rstlast(str_input As String, str_field As String) As Variant
Set rst = dbcOC.OpenRecordset(str_input, dbOpenSnapshot)
rst.MoveLast
fun_rstlast = rst.Fields(str_field)
rst.Close
Set rst = Nothing
End Function
Она находится в серии циклов, поэтому извлекает ту же последовательность записей, но из двух наборов идентичных таблиц (даЯ знаю, но я хочу сохранить это пока). Раздражает то, что по какой-то причине запуск функции из первого набора таблиц занимает в 10 раз больше времени, чем из второго набора таблиц. Я посмотрел на наборы записей, и один из более быстрой таблицы на самом деле в 2 раза больше!
Вот фрагмент кода, который выполняет цикл:
Set col = New Collection
str_DATE_G = "DATE_S"
arr_field(1) = "DATE_S"
arr_field(2) = "LATITUDE_T"
arr_field(3) = "LONGITUDE_T"
For r = 1 To UBound(arr_ID)
lng_ID = arr_ID(r)
For f = 1 To UBound(arr_field)
str_field = arr_field(f)
'debug.Print "str_field: " & str_field
' Create query string
str_input = "SELECT * " _
& " FROM (tbl_G_stats_" & tour & " INNER JOIN tbl_G_ov_" & tour _
& " ON tbl_G_stats_" & tour & ".PK_G = tbl_G_ov_" & tour & ".PK_G)" _
& " INNER JOIN tours_" & tour & " ON tbl_G_ov_" & tour & ".ID_T = tours_" & tour & ".ID_T" _
& " WHERE Clng(" & str_DATE_G & ") < " & lng_DATE_G _
& " AND tbl_G_stats_" & tour & "." & str_ID_A & " = " & lng_ID
secs1 = Timer()
var_rstlast = fun_rstlast(str_input, str_field)
secs2 = Timer()
'debug.Print "var_rstlast: " & var_rstlast
Debug.Print "Timer: " & lng_ID & " " & str_field & " " & (secs2 - secs1) * 1000
col.Add var_rstlast
Next f
Next r
Есть еще один цикл намного дальше назадэто чередование между двумя наборами таблиц (tour
).
Стоит отметить, что я исследовал индексы и типы данных двух таблиц, и все они идентичны.
Любые идеи о том, почему этомогло случиться?