powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / updade ili replace
14 сообщений из 14, страница 1 из 1
updade ili replace
    #33163959
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ya tak ponimayu chto "UPDATE" bistree rabotaet chem "REPLACE".
Tak li eto?
Yesli da, toqda pochemu :
*******************************************************
use nm123
FOR m.lnI=11 TO 25
lcFieldName = FIELD(m.lnI)
update nerd set &lcFieldName = 0 where &lcFieldName = m.lnValue
ENDFOR
upda nerd set CEM_A = A1+AA2+AA3+AA4+AA5+AA6+AA7+AA8+AA9+AA10,cem_b =bb1+bb2+bb3+bb4+bb5
copy to tur_1u for CEM_A=0.OR.CEM_B=0
use tur_1u
**************************************************
v etom primere yesli zamenit updata na replace (ili naoborot) nichevo ne menyaetsa?
Ili kak etot kod mojno "uskorit"?
...
Рейтинг: 0 / 0
updade ili replace
    #33164240
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=179805&hl=replace+update
...
Рейтинг: 0 / 0
updade ili replace
    #33167282
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi SDF!

> Ya tak ponimayu chto "UPDATE" bistree rabotaet chem "REPLACE".

Нет. При равных условиях они работают примерно одинаково.
Различия проявляются лишь при "множественной" замене - UPDATE блокирует индивидуально каждую обновляемую запись. а REPLACE блокирует всю таблицу целиком (теоретически это должно дать ему несколько большую производительность - ЕСЛИ НЕТУ КОНКУРЕНТОВ - иначе ему придётся ждать, пока "конкуренты" освободять свои блокировки).

Вот что у тебя может замедлять процесс - так это макроподстановки.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
updade ili replace
    #33167350
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Privet Igor. Spasibo za otvet i na ostalnix voprosov toje.
U menya v tablitse okolo 500000 zapisey.Na vipolnenie imenno etoy chasti proqrammi idyot okolo 10 sekund. Dumayu chto eto nenormolno.
A bez eti makropodstanovki kak mojet bit?
...
Рейтинг: 0 / 0
updade ili replace
    #33167372
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16 update-ов по таблице на 500 000 записей за 10 секунд - по-моему, это неплохо.
Можно ускорить, делая вместо 16-ти только два update и при этом сильно не изменяя код. Где-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FOR m.lnI= 11  TO  25  
  lcFieldName = FIELD(m.lnI)
  if &lcFieldName = m.lnValue
    update nerd set &lcFieldName =  0 
  endif
ENDFOR
upda nerd set CEM_A = A1+AA2+AA3+AA4+AA5+AA6+AA7+AA8+AA9+AA10,cem_b =bb1+bb2+bb3+bb4+bb5
copy to tur_1u for CEM_A= 0 .OR.CEM_B= 0  
use tur_1u
;-)
...
Рейтинг: 0 / 0
updade ili replace
    #33167398
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Privet Urri.
Programma konyeshno uskorilas, no ne dal tot rezultat kotoriy mne nujen.
Mne nujen nachinaya s 11-vo pole do 25 proverit vse pole i yesli u nix uchastvuet
'lnValue' zamenit vse na '0', no etovo koda
*******************
if &lcFieldName = m.lnValue
update nerd set &lcFieldName = 0
endif
**************************
ne poluchaetsa takoy rezultat.
...
Рейтинг: 0 / 0
updade ili replace
    #33167523
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что в запросе и в коде немного по-разному сравниваются две строки.
Help Set Exact
Help Set Ansi
&c.
...
Рейтинг: 0 / 0
updade ili replace
    #33167844
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Net Urri, vsye taki , pomoemu ot etovo ne zavisit.
...
Рейтинг: 0 / 0
updade ili replace
    #33167886
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну попробуй вместо
if &lcFieldName = m.lnValue

явно задать так:
if left(&lcFieldName,len(rtrim(m.lnValue))) == rtrim(m.lnValue)

(к примеру) ;-)
...
Рейтинг: 0 / 0
updade ili replace
    #33169992
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi SDF!

Вряд-ли у тебя есть индексы по всем этим полям, а значит UPDATE вынужден просматривать ВСЮ таблицу целиком, от того и скорость такая. возможно в данном случае более эффективно использовать SCAN + группу "условных" REPLACE (обрабатывая по одной записи за раз!)

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
updade ili replace
    #33825509
Йад
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Urri16 update-ов по таблице на 500 000 записей за 10 секунд - по-моему, это неплохо.
Можно ускорить, делая вместо 16-ти только два update и при этом сильно не изменяя код. Где-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FOR m.lnI= 11  TO  25  
  lcFieldName = FIELD(m.lnI)
  if &lcFieldName = m.lnValue
    update nerd set &lcFieldName =  0 
  endif
ENDFOR
upda nerd set CEM_A = A1+AA2+AA3+AA4+AA5+AA6+AA7+AA8+AA9+AA10,cem_b =bb1+bb2+bb3+bb4+bb5
copy to tur_1u for CEM_A= 0 .OR.CEM_B= 0  
use tur_1u
;-)

Интересная защита у форума, я сюда случайно попал 8)))
...
Рейтинг: 0 / 0
updade ili replace
    #33825510
Йад
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извените за вторжение, реально случейно попал, по Фокспро помогу чем смогу, или по БД SQL,ADO,Local BD міло serg_tsn@mail.ru. Помогу чем смогу, Для админов, Защиту постройте неормально, я реально не хакер...
...
Рейтинг: 0 / 0
updade ili replace
    #33826267
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Провел несколько тестов, и вот что получилось

1. Код автора топика выполняется ~ 10 сек. Примем эту цифру за эталон.

2. Если согласно этим рекомендациям заменить две макроподстановки на одну
Код: plaintext
1.
2.
3.
4.
5.
6.
*** Было
update nerd set &lcFieldName =  0  where &lcFieldName = m.lnValue

*** Стало
lcExp = "update nerd set " + lcFieldName + " = 0 where "  + lcFieldName + " = " + Transform(lnValue)

&lcExp
процесс ускоряется процентов на 20

3. Замена Update - SQL на Relpace (или его аналог в данном случае - Blank Fields) приводит к незначительному замедлению.

4. Если все участвующие поля проиндексировать, то процесс ускоряется в 10 раз ;-) (хотя размер индексного файла превышает размер таблицы )

5. Все манипуляции со сканированием (с созданием списка полей для обновления или без него) замедляют процесс в 3-4 раза

P.S. Тесты проводились на VFP8, таблица расположена локально.
...
Рейтинг: 0 / 0
updade ili replace
    #33826650
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЙадПомогу чем смогу, Для админов, Защиту постройте неормально, я реально не хакер...
А в чём проблема, "брат"?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / updade ili replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]