|
|
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Добрый день! Необходимо пройтись по всем записям таблицы. А вот какой метод лучше использовать, что быстрее? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 10:50 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
В общем случае будет SCAN .... ENDSCAN О , к стати и придуман для этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 10:56 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Разницы почти никакой, просто SCAN чаще удобнее использовать. А скорость зависит от самой таблицы, и обычно бывает выше, если она проиндексирована по тому полю, по-которому идет просмотр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 12:41 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
CrispyРазницы почти никакой, просто SCAN чаще удобнее использовать. А скорость зависит от самой таблицы, и обычно бывает выше, если она проиндексирована по тому полю, по-которому идет просмотр. Однако могут быть довольно неприятные "фичи" при использовании вложенных конструкций типа: SCAN...SCAN...ENDSCAN...ENDSCAN, связанные с автоматическим выполнением skip. Подробности см. в книге у Попова (хоть по Fox 2.0, хоть по Fox 2.6) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 12:50 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
CrispyРазницы почти никакой, просто SCAN чаще удобнее использовать. SCAN - может быть оптимизирована (при определенных услових). DO WHILE не оптимизируется по определению. Как следствие, использование SCAN может привести к существенному ускорению CrispyА скорость зависит от самой таблицы, Не столько от таблицы, сколько от факта наличия (существования) индексов и оптимизируемости FOR-условия в команде SCAN Crispyи обычно бывает выше, если она проиндексирована по тому полю, по-которому идет просмотр. Вообще-то, все с точностью наоброт. Факт наличия главного индекса (SET ORDER) приводит к замедлению выполнения SCAN. И очень существенному. Вот в этом случае можно говорить, что между SCAN и DO WHILE "разницы почти никакой" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 13:42 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
2ВладимирМ : В общем-то, я как раз и имел в виду сканирование по какому-то условию, для чего чаще всего и имеет смысл использовать индекс. А зависимость от таблицы - подразумевается - физическая упорядоченность или неупорядоченность записей (в отсутствие индекса). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 13:56 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Я бы категорически не советовал использовать SCAN. Иногда в особо критических ситуациях он меня подводил много раз... Использование DO WHILE никогда не давало проблем... P.S. Это мое скромное личное мнение, провереннное многолетней практикой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:19 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
авторИногда в особо критических ситуациях он меня подводил много раз... В каких именно, если не секрет? Я всегда использую SCAN и он меня не подводил. Может у меня ситуации не те?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:37 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Sergey ChЯ бы категорически не советовал использовать SCAN. Иногда в особо критических ситуациях он меня подводил много раз... Использование DO WHILE никогда не давало проблем... P.S. Это мое скромное личное мнение, провереннное многолетней практикой... Да, Сергей если не кодом, то хотя бы описанием, когда возникали проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:45 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Для надежности я использую такую конструцию select blablabla scan ... *код с "путешествием" по рабочим облястям ... select blablabla endscan Может, я неправ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:56 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
Если мне память не изменяет, то основная проблема scan`а - пропуск (или повторный проход) записей при изменении значений полей образующих текущий индекс. Но та же проблема у DO WHILE со SKIP`ом. Всегда пользуюсь SCAN`ом, кроме случаев, когда надо дополнительно поработать SKIP`ом вовремя перебора. Глюков фокса не наблюдал ни разу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:56 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
авторselect blablabla вот так в скане не нужно делать эта перестраховка из доса идет в новых версиях вфп все нормально итак будет работать он все равно бежит по той области с которой стартовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 15:20 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
- авторИногда в особо критических ситуациях он меня подводил много раз... В каких именно, если не секрет? Я всегда использую SCAN и он меня не подводил. Может у меня ситуации не те?))Не в тех ли ситуациях, когда в цикле нужно менять значение поля, по которому таблица проиндексирована, причем этот индекс сейчас используется по set order? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 16:04 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
alex11100 авторselect blablabla вот так в скане не нужно делать эта перестраховка из доса идетВообще-то и в FPD вполне работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 21:54 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
alex11100 авторselect blablabla вот так в скане не нужно делать эта перестраховка из доса идет в новых версиях вфп все нормально итак будет работать он все равно бежит по той области с которой стартовал А я пару раз садился на эти грабли в VFP 5 (подробности уже не помню) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 09:37 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
alex11100 авторselect blablabla вот так в скане не нужно делать эта перестраховка из доса идет в новых версиях вфп все нормально итак будет работать он все равно бежит по той области с которой стартовал VFP 8 "SCAN ... ENDSCAN ensures that, upon reaching ENDSCAN, Visual FoxPro reselects the table that was current when the SCAN ... ENDSCAN loop began." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 10:34 |
|
||
|
DO WHILE или SCAN
|
|||
|---|---|---|---|
|
#18+
CrispyРазницы почти никакой, просто SCAN чаще удобнее использовать. А скорость зависит от самой таблицы, и обычно бывает выше, если она проиндексирована по тому полю, по-которому идет просмотр. Ну я бы не сказал разницы почти никакой... Проводил тесты на таблицах с 2-3 милион записеи... SCAN .. ENDSCAN работал на много быстреи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 12:41 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33531537&tid=1592411]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 493ms |

| 0 / 0 |
