
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.12.2007, 18:13
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Вопрос собственно в заглавии. Как быстрее работает фокс? При использовании: 1. UPDATE... WHERE usl=.t. 2. LOCA for usl=.t. и REPl ..., при условии таблица одна, запись с условием уникальна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 18:21
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Быстрее всего REPLACE FOR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 19:19
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Это зависит от нескольких параметров. Если бы что-то было однозначно лучше при людых условиях, то, наверное, только это бы и осталось, не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 19:41
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Sergey ChБыстрее всего REPLACE FOR Нет. Это как раз самый неудачный (не скажу, что медленный) способ, поскольку в этом случае Fox пытается наложить табличную блокировку вне зависимости от реального количества изменяемых записей. А это не всегда возможно. Причем на эту команду распространяются ограничения накладываемые на команды с For-условием. LOCATE FOR ... - надо уметь готовить. В смысле использовать. Новички обычно этого не умеют и получают страшные тормоза при включенном главном индексе. Это справедливо и для Replace for ... Для новичков лучше использовать Update-SQL. Хотя тоже следует помнить, что эта команда игнорирует наложенные фильтры и могут быть проблемы с буферизированными данными. Вопрос оптимизации (быстродействия) - это почти искусство. Очень много разных влияющих факторов. Сказать что всегда и при любых условиях следует использовать то и не использовать это, ну, как минимум, самонадеяно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 19:53
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
ВладимирМ LOCATE FOR ... - надо уметь готовить. В смысле использовать. Новички обычно этого не умеют и получают страшные тормоза при включенном главном индексе. Это справедливо и для Replace for ... Пожалуйста, если можно - поподробней. Нарывался и поэтому хотелось бы просечь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 19:59
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
ВладимирМ Нет. Это Вопрос оптимизации (быстродействия) - это почти искусство. Очень много разных влияющих факторов. Сказать что всегда и при любых условиях следует использовать то и не использовать это, ну, как минимум, самонадеяно. Огромная просьба выделить эту тему. Думаю, многим будет полезно. Разные ситуации, варианты решения или предложения, собственный опыт... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 21:55
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Все зависит от того - насколько большой курсор открыт у Вас. И есть ли индексы на условие. Наверное, самый быстрай вариант - испльзовать sqlexec(). Но тогда локальные курсоры нужно будет обновить. Очень много может быть различных сочетаний условий применения, влияющих на производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 22:03
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
В Вашев конкретном случае вариант 1 или 2 - будет быстрее работать LOCATE, т.к. Вы просмотрели курсор, (при наличии индексов Фокс может оптимизировать это) , сделали 1 replace и остановились. А условие WHERE - потянет за собой просмотр всего курсора (но опять же индексы могут оптимизировать поиск). Индексы я имею в виду локальные, не серверные. В remote/local view нет индксов, я их в некоторых случаях принудительно индексирую локально - хотя не могу рекомендовать это всем - встречаются подводные камни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2007, 00:03
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
Спасибо за разъяснение теории. Методом проб, с замером скорости ( по разности времени) не смог определиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2007, 08:48
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
BMJВопрос собственно в заглавии. Как быстрее работает фокс? При использовании: 1. UPDATE... WHERE usl=.t. 2. LOCA for usl=.t. и REPl ..., при условии таблица одна, запись с условием уникальна? Если usl=.t. только для одной записи, то лучше сменить подход. .T. ведь где-то ранее предварительно устанавливается? Если таблица имеет абстрактный ключ (nTableId) и индекс по нему (у меня со всеми таблицами так), то достаточно в переменную сохранить nTableId а дальше: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2007, 19:40
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
StandD ВладимирМ LOCATE FOR ... - надо уметь готовить. В смысле использовать. Новички обычно этого не умеют и получают страшные тормоза при включенном главном индексе. Это справедливо и для Replace for ... Пожалуйста, если можно - поподробней. Нарывался и поэтому хотелось бы просечь... Все ниже следующее относится к таблицам DBF при прямом доступе к ним из FoxPro. Основа оптимизации (ускорения) в FoxPro - это индексы. Есть индексы - оптимизация возможна. Нет индексов - ну, тоже возможна, но уже очень специфическими способами и в очень ограниченном круге задач. Если по тому выражению, которое указано в условии поиска существует индекс, то, по умолчанию, включается механизм, так называемой, rushmore-оптимизации. Что означает это слово - никто не знает. Просто звучит красиво и загадочно Однако если выполняется команда с FOR-условием (LOCATE FOR, REPLACE FOR и т.п.), то на оптимизируемый поиск накладывается еще и главный индекс. Т.е. искать-то FoxPro ищет, но главный индекс заставляет искать в определенном порядке, чем сводит на нет все преимущество оптимизации. Поэтому, для лучше оптимизации команд с FOR-условием, если это возможно по условию задачи, желательно отключать главный индекс. Код: plaintext 1. 2. 3. Вот в этом случае rushmore-оптимизации ничто не мешает и поиск выполняется максимально быстро. ================ Однако если речь идет об удаленных данных (Remote View, Local View, CursorAdapter), то следует понимать, что результатом работы этих команд является таблица (курсор). Физически другая таблица. Выборка из исходных таблиц. Поскольку это другая таблица, то, естесственно, она не имеет вообще никаких индексов. Поэтому говорить о rushmore-оптимизации для них - бессмысленно. Не может быть здесь никакой оптимизации. Вне зависимости от используемых команд. Разумеется, если Вы специально не создадите для них индексов. Но создание индексов занимает дополнительное время. Однако по самой своей природе, выборка не должна быть очень уж большой. Это значит, что поиск в ней будет выполняться достаточно быстро и без оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 09:22
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
2ВладимирМ Спасибо! Опытным путем уже сам дотумкал до того, чтобы перед Locate снимать индекс. Помогает. А вот еще вопрос. Старый правда, но интересно - про фильтр на гриде. Уже обсуждалась тема, все понятно, но можно ли ускорить "проявление" данных на гриде под фильтром отключая индекс? Вот это у меня не получается. Скорее всего, сделать нельзя, но вдруг? Полсто есть один кусок, нормально работающий, но вот с такой штукой. А переделывать все неохота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 09:59
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
StandD... но можно ли ускорить "проявление" данных на гриде под фильтром отключая индекс? ... Фильтры работают гораздо быстрее если таблица открыта монопольно. С таблицей БД это делать не стоит, но если фильтры используются активно, то можно использовать Local View примерно такое: Код: plaintext Чтобы код не переписывать, подменить таблицу на LV в DE формы можно так: 1. Убрать таблицу из DE 2. В DE.BeforeOpenTable() Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 10:48
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
StandD А вот еще вопрос. Старый правда, но интересно - про фильтр на гриде. Уже обсуждалась тема, все понятно, но можно ли ускорить "проявление" данных на гриде под фильтром отключая индекс? Вот это у меня не получается. Скорее всего, сделать нельзя, но вдруг? Полсто есть один кусок, нормально работающий, но вот с такой штукой. А переделывать все неохота. Раз такой вопрос возник, значит про фильтр по прежнему не понятно. Идея фильтра заключается в том, что это не есть нечто вычисленное один раз. Это условие, которые проверяется каждый раз при попытке перейти на очередную запись. Т.е. пытаешся перейти на запись и по новой вычисляешь фильтр. Поэтому факт наличия главного индекса существенно не влияет на скорость обработки фильтра. Хотя, в VFP9 появилась специальная настройка Код: plaintext которая как раз и призвана подключить механизм rushmore-оптимизации к фильтру в Grid. Однако присоединясь к совету Dima_T . По возможности, лучше отказаться от фильтра в пользу выборки, Local View или CursorAdapter. Дело тут вовсе не в быстродействии (хотя это тоже играет свою роль), а в способности приложения меняться под конкретную задачу (масштабировании приложения). Фильтр накладывает более жесткие ограничения. Их труднее расширить или как-то изменить под новые условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 12:02
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
2Dima T Спасибо за инфу. Талица открыта немонопольно, но на локальном компьютере. Это имеет разницу с EXCL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 12:04
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
2 ВладимирМ Понял, учту! Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 12:26
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
2 Dima T Вместо того, чтобы задавать лишние вопросы - надо сначала самому попробовать! Виноват... Попробовал EXCL - здорово! Разница колоссальная. Спасибо за наводку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 12:28
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
ВладимирМ Если по тому выражению, которое указано в условии поиска существует индекс, то, по умолчанию, включается механизм, так называемой, rushmore-оптимизации. Что означает это слово - никто не знает. Просто звучит красиво и загадочно Документация от безвременно ушедшей фирмы Foxpro Inc. для FoxProLan 2.0 (for DOS) сказано, что в период разработки кода оптимизации запросов по ТВ шел сереал с супер-героем Рашмором. Его манера предевигаться стремительно и дала имя технологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 13:35
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
StandD2 Dima T Вместо того, чтобы задавать лишние вопросы - надо сначала самому попробовать! Виноват... Попробовал EXCL - здорово! Разница колоссальная. Спасибо за наводку! EXCL для таблиц БД лучше не использовать. Основной прирост скорости из-за кэширования фоксом, но из-за этого могут проблемы возникнуть при вылетании проги или проблемах с сетью - изменения могут не успеть сохраниться на диск (в худшем случае порча структуры DBF), порча индексов. Также таблица становится недоступна другим пользователям (даже в другой DataSession) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2007, 17:04
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
2 Dima T. Таблица на лок.диске, только для одного пользователя и постоянно обновляется копированием, т.ч. "не страшно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2007, 15:08
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
В ряде случаев быстрее работает set order to scan for ... repla ... endscan а иногда set order to needfield seek needvalue do while value = needvalue repla ... enddo Разумеется, если repla не присваивает значения колонке условий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2007, 15:11
|
|||
|---|---|---|---|
|
|||
как быстрее UPDATE или LOCA ? |
|||
|
#18+
В ряде случаев быстрее работает set order to scan for ... repla ... endscan а иногда set order to needfield seek needvalue do while value = needvalue repla ... enddo Разумеется, если repla не присваивает значения колонке условий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.12.2007, 04:12
|
|||
|---|---|---|---|
как быстрее UPDATE или LOCA ? |
|||
|
#18+
apapacy ВладимирМ ...так называемой, rushmore-оптимизации. Что означает это слово - никто не знает. Просто звучит красиво и загадочно Документация от безвременно ушедшей фирмы Foxpro Inc. для FoxProLan 2.0 (for DOS) сказано, что в период разработки кода оптимизации запросов по ТВ шел сереал с супер-героем Рашмором. Его манера предевигаться стремительно и дала имя технологии. New English-Russian Dictionary, Dover Publications, New York (C) 1944 :-) rush ... (run) скорый бег; натиск, напор, наплыв, порыв || ~ vn. кидаться, кинуться, бросаться, броситься, стремиться, хлынуть. Ну, more и так ясно. Герою ник-то неспроста подобрали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&tablet=1&tid=1588328]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 310ms |

| 0 / 0 |
