2010-06-18 4 views
2

Это связано с моей предыдущей теме: SQL Query takes about 10 - 20 minutesSQL узкое место, как исправить

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

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 минут). Я не знаю, почему это так медленно. Может быть, лотоснитовы SQL-драйвера?

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

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

+4

Ну лично я почти НИКОГДА не зацикливаюсь на записях, вы имеете дело с данными базы данных в наборах не петель. – HLGEM

+1

Сколько записей вы просматриваете? Над чем связь? –

+0

Около 6000 над представлением SQL LotusNotes. используя драйвер notesSQL. – masfenix

ответ

0

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

0

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

+0

У меня уже есть транзитный запрос (для получения данных с удаленного сервера). Я буду исследовать запрос таблицы make. – masfenix

+0

Если вы измените представление SQL на новый запрос, просто сделайте Select * INTO newtable из passthroughquery – websch01ar

+0

Занимает около 15 минут :( – masfenix

0

Цикл не делает «ничего», он вызывает MoveNext, который потенциально делает LOT.

+0

Правильно, поэтому мне нужно, чтобы вы перестали много делать, и просто передайте проклятые данные в мою локальную таблицу доступа.: P – masfenix

Смежные вопросы