Узкое место SQL, как исправить - PullRequest
2 голосов
/ 18 июня 2010

Это связано с моей предыдущей веткой: SQL-запрос занимает около 10 - 20 минут

Однако я вроде понял проблему.Проблема (как описано в предыдущем потоке) заключается не в вставке (хотя она все еще медленная), проблема заключается в циклическом прохождении самих данных. Рассмотрим следующий код:

 Dim rs As DAO.Recordset
Dim sngStart As Single, sngEnd As Single
Dim sngElapsed As Single



Set rs = CurrentDb().QueryDefs("select-all").OpenRecordset
MsgBox "All records retreived"

sngStart = Timer
Do While Not rs.EOF
    rs.MoveNext
Loop
sngEnd = Timer
sngElapsed = Format(sngEnd - sngStart, "Fixed") ' Elapsed time.

MsgBox ("The query took " & sngElapsed _
    & " seconds to run.")

Как видите, этот циклничего не делает.Вы ожидаете, что он закончится через несколько секунд, однако для его запуска потребуется около 857 секунд (или 15 минут).Я не знаю, почему это так медленно.Может быть, драйвер lotusnotes sql?

есть еще идеи?(решение на основе Java, любое другое решение)

Какова моя цель: Получить все данные с удаленного сервера и вставить в локальную таблицу доступа

Ответы [ 3 ]

0 голосов
/ 18 июня 2010

Цикл не делает "ничего", он вызывает MoveNext, который потенциально выполняет много.

0 голосов
/ 18 июня 2010

Этот документ содержит некоторую информацию о настройке производительности в NotesSQL.Если вы этого еще не сделали, выберите ваши данные в представлении Notes вместо Notes Forms.Затем NotesSQL будет использовать индексы в представлениях для более быстрых запросов.Возможно, вам потребуется создать представление в базе данных Notes, но выигрыш в производительности сделает его полезным.

0 голосов
/ 18 июня 2010

Я рекомендую вам создать сквозной запрос, который будет получать данные с удаленного сервера. Затем создайте запрос Make Table, который использует вышеупомянутый запрос в качестве своего источника. Ваша функция будет упрощена до вызова этого второго запроса.

...