|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Такая проблема. Имеются 2 таблицы одинакового формата по 2 млн. записей в каждой. Нужно выполнить SCAN..ENDSCAN и заменить строки во второй таблице, в котовых id=id таблицы 1. Я даже боюсь подумать сколько времени будет выполняться скан. Как мне поступить, чтобы быстрее обработать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2009, 11:48 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
В соседней теме именно этот вопрос уже обсудили. Тут почитай ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2009, 12:53 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
KosoblikЯ даже боюсь подумать сколько времени будет выполняться скан. 2 млн. записей это не много. Сам скан 3-5 сек в зависимости от скорости чтения с диска и размера файла. Выбор оптимального алгоритма зависит от того сколько замен надо будет сделать. Прикинь сколько записей обновить надо за один проход. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2009, 13:12 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
ИМХО самой быстрой конструкцие в этой ситуации будет: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 09:01 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Dima TВыбор оптимального алгоритма зависит от того сколько замен надо будет сделать. Прикинь сколько записей обновить надо за один проход. Как ни крути, замена с использованием SET RELATION, SET KEY, SEEK, REPLACE и Co будет медленнее, чем Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 12:07 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
rewareКак ни крути, замена с использованием SET RELATION, SET KEY, SEEK, REPLACE и Co будет медленнее, чем Код: plaintext 1. 2.
1. Используется VFP9 2. Есть индексы, подходящие для оптимизации ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 12:25 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Хоть меня и раскритиковали в свое время на этом форуме, все же скажу. Однажды мне удалось существенно ускорить работу цикла просто заменив SCAN...ENDSCAN на DO WHILE...ENDDO. Не помню какая была операционка, но FoxPro был досовский, 2.6 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 13:52 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Юрий Р.Хоть меня и раскритиковали в свое время на этом форуме, все же скажу. Однажды мне удалось существенно ускорить работу цикла просто заменив SCAN...ENDSCAN на DO WHILE...ENDDO. Не помню какая была операционка, но FoxPro был досовский, 2.6 Для любого FoxPro это будет быстро, если сделать DO WHILE...ENDDO по всем 2.5 млн записей с ifseek() той что надо в другой таблице и потом replace в этой одной записи... Вариантов решения этой просто задачи множество, но я бы сделал ставку на UPDATE и построение соответствующей среды, чтобы автоматом работала оптимизация... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 15:30 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
rewareDima TВыбор оптимального алгоритма зависит от того сколько замен надо будет сделать. Прикинь сколько записей обновить надо за один проход. Как ни крути, замена с использованием SET RELATION, SET KEY, SEEK, REPLACE и Co будет медленнее, чем Код: plaintext 1. 2.
Именно этот вариант тормозной если надо обновить 1-2% записей, т.к. перезаписывает все записи независимо от совпадения обновляемых полей. Можешь проверить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Не буду спорить что оптимальный вариант с UPDATE, но такой: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 18:25 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Промахнулся, запостил недописав. UPDATE такой: Код: plaintext 1. 2.
Только такой синтаксис в 6-ке не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 18:28 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
А как фокс работает с иннерджойнами? А то, может, так быстрее будет (идея в том, что не будет лишних операций записи)? Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2009, 18:48 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
tanglirА как фокс работает с иннерджойнами? А то, может, так быстрее будет (идея в том, что не будет лишних операций записи)? Я постом выше пример написал как без лишних записей обойтись. Иннерджойн для этого вообще не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2009, 09:28 |
|
SCAN в 2 млн. записей - как увеличить скорость
|
|||
---|---|---|---|
#18+
Dima T, Суть Вашего варианта заключается в отсеивании записей, которые не нужно обновлять (по той причине, что в них уже нужные значения). Вот я и спросил про иннерджойн, может, с ним было бы ещё быстрее (хотя, похоже, нет, ну, а вдруг?). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2009, 17:42 |
|
|
start [/forum/topic.php?fid=41&msg=36208010&tid=1586039]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 138ms |
0 / 0 |