|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста, есть ли альтернатива конструкции SCAN...ENDSCAN? Дело в том, что я сканю все записи одной таблицы, и если записи удовлетворяют условию, то обновляется во второй таблице по ID. В обеих таблицах огромное количество записей, и SCAN работает больше суток. Может есть другой вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 08:55 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87Подскажите пожалуйста, есть ли альтернатива конструкции SCAN...ENDSCAN? Дело в том, что я сканю все записи одной таблицы, и если записи удовлетворяют условию, то обновляется во второй таблице по ID. В обеих таблицах огромное количество записей, и SCAN работает больше суток. Может есть другой вариант? Нужны детали : 1) Кол-во записей в этих таблицах. 2) Как именно происходит обновление во 2-й таблице при выполнении условия. 3) Желательно упрощенный кусок кода с этим SCAN и обновлением второй таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 10:56 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Да, не забудьте указать, какой версией фокса пользуетесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 10:58 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87Подскажите пожалуйста, есть ли альтернатива конструкции SCAN...ENDSCAN? Дело в том, что я сканю все записи одной таблицы, и если записи удовлетворяют условию, то обновляется во второй таблице по ID. В обеих таблицах огромное количество записей, и SCAN работает больше суток. Может есть другой вариант?И почему решили, что дело в типе цикла? Огромное - это какое? Какие индексы на таблицах? Какие из них активные? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 11:53 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
reware, В таблицах по 500 тыс. записей, но может быть и больше миллиона в перспективе. Обновлены происходит командой UPDATE tab2 SET ... WHERE id=tab1.id (просто заменяю поля в записях, если записи с такими ID присутствуют в обоих файлах). Код: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 12:12 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87, стало быть индексов у таблицы result нет ? Жаль. Обратите внимание на хелп - When updating multiple records in a table opened for shared access, SQL UPDATE uses record locking, unlike the REPLACE command. This reduces record contention in multiuser situations but might reduce performance. For maximum performance, open the table for exclusive use or use the FLOCK( ) function to lock the table. И подправьте свой UPDATE : Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 13:04 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Не, индексов нет. Может есть что-нибудь кроме SCAN-ENDSCAN для решения этой проблемы? Потому что записей будет намного больше ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 13:13 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87Не, индексов нет. Может есть что-нибудь кроме SCAN-ENDSCAN для решения этой проблемы? Потому что записей будет намного большеДа что Вы к скану прицепились. Индекса нужного нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 14:01 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87Не, индексов нет. Так создайте. Foxer_87Может есть что-нибудь кроме SCAN-ENDSCAN для решения этой проблемы? И SCAN вполне годится. Варианты примерно такие, по Вашей методике: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Или наоборот: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Или что-нить в этом роде, конкретное решение зависит от особенностей реальных таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 14:02 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
rewareFoxer_87, стало быть индексов у таблицы result нет ? Жаль. Обратите внимание на хелп - When updating multiple records in a table opened for shared access, SQL UPDATE uses record locking, unlike the REPLACE command. This reduces record contention in multiuser situations but might reduce performance. For maximum performance, open the table for exclusive use or use the FLOCK( ) function to lock the table. И подправьте свой UPDATE : Код: plaintext 1. 2.
Ты забыл уточнить, что для такой команды UPDATE цикл SCAN уже не нужен. Это обновление всех записей сразу данными из другой таблицы, по указанному условию связи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 14:15 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 14:16 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
1. Индекс по Id нужен в result 2. Если реально изменений немного за один раз, то проще сначала выбрать селектом записи которые поменять, а потом менять. Примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 14:43 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
rewareFoxer_87, стало быть индексов у таблицы result нет ? Жаль. Обратите внимание на хелп - When updating multiple records in a table opened for shared access, SQL UPDATE uses record locking, unlike the REPLACE command. This reduces record contention in multiuser situations but might reduce performance. For maximum performance, open the table for exclusive use or use the FLOCK( ) function to lock the table. И подправьте свой UPDATE : Код: plaintext 1. 2.
1 место присуждается этому ответу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 15:00 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
ВладимирМТы забыл уточнить, что для такой команды UPDATE цикл SCAN уже не нужен. Это обновление всех записей сразу данными из другой таблицы, по указанному условию связи. Разумеется, SCAN уже не нужен. Он был ненужен, по большому счету, и в коде автора. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2009, 18:48 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
GrammerPro, а что значит DBFFILE->STR_1? Это не то же что DBFFILE.STR_1? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2009, 14:36 |
|
SCAN...ENDSCAN очень долго работает
|
|||
---|---|---|---|
#18+
Foxer_87GrammerPro, а что значит DBFFILE->STR_1? Это не то же что DBFFILE.STR_1? Абсолютно то же самое. Это старинная привычка, но полезная - четко для себя отличаю свойства и методы объектов от полей базы данных. Из двух предложенных вариантов выберите, какой на Ваших данных работает быстрее. Еще можно сравнить с третьим вариантом, когда тоже создается временный индекс, а затем используется UPDATE. Вы видимо уже из сообщений поняли, что даже просто убрав в Вашем примере лишний SCAN и оставив голый UPDATE, вы уже сократите время обработки от одних суток до 10 минут. Если же решите использовать индекс, то видимо культурнее будет помещать его во временную папку виндовс: index on ID to (addbs(sys(2023))+"IND_RESULT.TMP") compact ... erase (addbs(sys(2023))+"IND_RESULT.TMP") ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2009, 14:56 |
|
|
start [/forum/topic.php?fid=41&msg=36205694&tid=1586045]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 334ms |
total: | 465ms |
0 / 0 |