On-line: Andrey, PSP, SergKis, гостей 1. Всего: 4 [подробнее..]
АвторСообщение
администратор




Пост N: 2777
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.03.13 17:59. Заголовок: Что быстрее ?


 
if dbseek(user_kodik)
dbeval({|| aadd(afilt,nakl_r1->(recno()))},,{|| nakl_r1->kod_kl==user_kodik})
endif


или
if dbseek(user_kodik)
do while nakl_r1->kod_kl==user_kodik
aadd(afilt,nakl_r1->(recno()))
skip
enddo
endif

или

if dbseek(user_kodik)
do while nakl_r1->kod_kl==user_kodik
dborderinfo(DBOI_SKIPEVAL,,,{|key,rec| if(key==user_kodik,aadd(afilt,rec),)} )
enddo
endif



Что скажете , практики ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]


Администратор




Пост N: 2762
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.03.13 19:25. Заголовок: Если рассматривать э..


Если рассматривать эти тесты с локальным DBFCDX, я думаю, быстрее всего будет так:

if dbSeek(key)
dbOrderInfo(DBOI_SCOPEBOTTOM,,, key)
while ! eof()
...
skip
enddo
dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)
endif

или

if dbSeek(key)
dbOrderInfo(DBOI_SCOPEBOTTOM,,, key)
dbEval({|| ...},,,,, .t.)
dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)
endif

В этом случае ключ проверяется непосредственно самим rdd, без выполнения выражение типа nakl_r1->kod_kl==user_kodik

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2778
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.03.13 19:41. Заголовок: Pasha пишет: Если р..


Pasha пишет:

 цитата:
Если рассматривать эти тесты с локальным DBFCDX


А если с LETO ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2763
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.03.13 19:50. Заголовок: Dima пишет: А если ..


Dima пишет:

 цитата:
А если с LETO ?



трудно сказать. Смотря что критично. В варианте со scope мы имеем 2 дополнительных запроса на установку/снятие scope, т.е. небольшое увеличение сетевого трафика

в варианте

f dbSeek(key)
while ! eof() .and. ordKeyVal() == key
...
skip
enddo

этих запросов нет, но выполняется чуть больше операций на клиенте: сравнение значения ключа
Кстати, для leto я специально делал udf-функцию UDF_dbEval:

/*
* UDF_dbEval function returns buffer with records by order <xOrder>, and for condition,
* defined in <xScope>, <xScopeBottom>, <cFilter>, <lDeleted> parameters
* Function call from client:

leto_ParseRecords( leto_Udf('UDF_dbEval', <xScope>, <xScopeBottom>, <xOrder>, <cFilter>, <lDeleted> ) )
while ! eof()
...
skip
enddo
dbInfo( DBI_CLEARBUFFER )

*/

Она вообще все делает одним запросом.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2779
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.03.13 19:53. Заголовок: Понял. Спасибо , буд..


Понял. Спасибо , буду тестить.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2780
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.03.13 10:28. Заголовок: Вот и тест afilt:={..


Вот и тест
 
afilt:={}
nsec:=seconds()
if dbseek(userkod)
dbeval({|| aadd(afilt,recno())},,{|| kod_kl==userkod})
endif
? len(afilt) //191327
? seconds()-nsec //1.92
dbgotop()
*******************
afilt:={}
nsec:=seconds()

if dbseek(userkod)
do while kod_kl==userkod
aadd(afilt,recno())
skip
enddo
endif
? len(afilt) //191327
? seconds()-nsec //1.77
dbgotop()
*******************
afilt:={}
nsec:=seconds()

if dbseek(userkod)
aadd(afilt,recno())
do while kod_kl==userkod
dborderinfo(DBOI_SKIPEVAL,,,{|key,rec| if(key==userkod,aadd(afilt,rec),)} )
enddo
endif

? len(afilt) //191327
? seconds()-nsec //2.94
dbgotop()

******************
afilt:={}
nsec:=seconds()

if dbSeek(userkod)
dbOrderInfo(DBOI_SCOPEBOTTOM,,, userkod)
while ! eof()
aadd(afilt,recno())
skip
enddo
dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)
endif
? len(afilt) //191327
? seconds()-nsec //0.39



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 161
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет