Снижение производительности / медленный запрос после компактного восстановления - Access 2007
Я выполняю большое количество операций вставки, используя VBA - Access. код VBA находится в файле "control.accdb", выполняющем операции над "data.accdb". Несколько таблиц в процессе создаются из VBA, немногие остаются таковыми.
После завершения первой фазы процесса я выполняю сжатие и восстановление вручную или из кода DBEngine.Compact VBA. Второй этап (тот же код - следующая итерация) становится очень и очень медленным.
Вот код вставки:
SQL = "INSERT INTO ExpectedResult " _
& "( DLID, NumRows, Total, SubjectBlock, NextSubjectBlockSeq ) " _
& "SELECT INVDL.DLID, 1 AS Expr1, INVDL.Amount, " _
& "INVDL.SubjectBlock,INVDL.SubjectBlockSeq+1 AS Expr2 " _
& "FROM INVDL where SubjectBlock > 0;"
cdb.Execute (SQL)
TargetNumRows = 2
Do While TargetNumRows < MaxSubjectBlockSeq + 1
Set qdf = cdb.QueryDefs("pq_appendToExpectedResult")
qdf!TargetNumRows = TargetNumRows '' parameter value
qdf.Execute
TargetNumRows = TargetNumRows + 1
Set qdf = Nothing
Loop
where pq_appendToExpectedResult :
PARAMETERS TargetNumRows Long;
INSERT INTO ExpectedResult _
( DLID, NumRows, Total, SubjectBlock, NextSubjectBlockSeq ) _
SELECT INVDL.DLID+1-[TargetNumRows], [TargetNumRows] AS Expr1, _
[ExpectedResult].[Total]+[INVDL].[Amount] AS NewTotal, _
INVDL.SubjectBlock, [INVDL].[SubjectBlockSeq]+1 AS Expr2 _
FROM INVDL INNER JOIN ExpectedResult _
ON (INVDL.SubjectBlock = ExpectedResult.SubjectBlock) _
AND (INVDL.SubjectBlockSeq = ExpectedResult.NextSubjectBlockSeq) _
WHERE (((INVDL.SubjectBlockSeq)>=[TargetNumRows]) _
AND (ExpectedResult.NumRows=[TargetNumRows]-1));
Насколько мне известно, все индексы в INVDL нетронуты. Я удаляю таблицу ExpectedResult и воссоздаю ее с индексами после каждой фазы (итерации). Другие таблицы - не думаю, что будет иметь значение.