powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос Fox 2.6
15 сообщений из 15, страница 1 из 1
Помогите оптимизировать запрос Fox 2.6
    #37502354
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если Вас не затруднит, помогите переделать прогу, а то слишком долго работает, приму любые варианты!!! Заранее большое СПАСИБО!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
_DATK = Date()
_DATN=_DATK-Day(_DATK)+ 1 
_Type= 0 
_Stok= 0 

@  5 ,  21  Say 'ВВЕДИТЕ ПЕРИОД ДЛЯ ФОРМИРОВАНИЯ ОТЧЁТА'
@  6 ,  21  Say 'Дата начала периода    ' Get _DATN
@  7 ,  21  Say 'Дата окончания периода ' Get _DATK
@  8 ,  21  Say 'Тип протокола          ' Get _Type
@  9 ,  21  Say 'Сток (Да-1, Нет-0)     ' Get _Stok
Read

Select Int(S.kgr/ 100000 ) As RG,S.kgr As kgr,S.KLIENT As KLIENT,S.NTR As NTR,;
	"                                                 " As GR,S.Mod As Mod,;
	S.KB As KOL,S.ZN As CEN,S.DATOT As DATOT, 0000000000 . 00  As SUME, NPR,;
	NPD,  00  As Coll,  00  As TM;
	FROM T0404038 S Into Table SNCEN.Dbf;
	WHERE DATOT>=_DATN .And. DATOT<=_DATK .And. kop<> 3  .And. NPR> 0 

*** Находим протоколы для стоков ***
_Npd= 0 
Sele SNCEN
Scan
	_MOD=Mod
	_ntr=NTR
	_kgr=kgr
	_NPR=NPR
	_Npd=NPD
	Sele t1082
	Seek Str(_MOD, 8 )
	_kl=nk
	Sele P_SNCEN
	Locate For NPR=_NPR And NPD=_Npd And DATD<=_DATK .And. Type=_Type
	If Found()
		_COLL=Coll
		Sele SNCEN
		Repl Coll With _kl, TM With _COLL
	Else
		Sele SNCEN
		Dele
	Endif
Endscan
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502396
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тормоз из-за этого
Код: plaintext
Locate For NPR=_NPR And NPD=_Npd And DATD<=_DATK .And. Type=_Type
чтобы что-то подсказать напиши какие есть индексы у таблицы P_SNCEN
и типы полей NPR, NPD, DATD, Type
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502411
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Индекс можно создать любой.
Но мне кажется, можно, как-то через запрос это сделать.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502413
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

NPR, NPD, DATD, Type - все numeric
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502422
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

кроме datd - date

P.s. почему нельзя редактировать свои сообщения, после опубликации, очень не удобно.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502440
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СТАРЧЕDima T,

Индекс можно создать любой.
Но мне кажется, можно, как-то через запрос это сделать.
Можно, только если речь про Fox 2.6 то там только SELECTы и то очень ограниченные по возможностям были.

Наименее затратный способ - сделать индекс по одному из полей NPR, NPD, Type - взять то которое больше всего количество значений содержит. И проверку этого поля вынести в начало условия. Тога рашмор частично LOCATE оптимизирует.
Например если сделаешь индекс по NPD то так
Код: plaintext
Locate For NPD=_Npd And NPR=_NPR And DATD<=_DATK .And. Type=_Type
попробуй, если недостаточно ускорится, то попробуем более сложные варианты. Если б не было "<=" то можно было бы по всем полям индекс сделать и на SEEK заменить.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502476
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вариант:
Сделай индекс str(NPR, 8) + str(NPD, 8) + str(Type,8) + dtoc(DATD, 1)
потом замени это
Код: plaintext
1.
	Locate For NPR=_NPR And NPD=_Npd And DATD<=_DATK .And. Type=_Type
	If Found()
на
Код: plaintext
1.
seek str(_NPR,  8 ) + str(_NPD,  8 ) + str(_Type, 8 )
If Found() and DATD<=_DATK

PS 8-ки исправь на свои размеры полей
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502579
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Попробую второй вариант, а то первый уже 50 мин. считает)
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502610
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СТАРЧЕDima T,

Попробую второй вариант, а то первый уже 50 мин. считает)
Многовато :)
Быстрее второго вряд ли что придумать получится.
У тебя еще селект в начале, его не замерял, сколько он времени делается? Хотя там тоже нечего оптимизировать.
Разве что детально вникать в смысл считаемого и на корню менять принцип расчета.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502646
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

select 5-10 сек. выполняется, очень долгая обработка при replace и delete
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502656
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Кста второй вариант помог, обработка в 3 раза уменьшилась!!!!, спс тебе, мот еще, что-нибудь придумаешь?)))
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502688
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СТАРЧЕмот еще, что-нибудь придумаешь?)))
Можно еще железо поменять на помощнее :)
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502741
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет железа есть еще такой момент - виндовс 2000/XP запускает дос-проги в эмуляторе дос-машины. Можно попробовать оптимизировать этот эмулятор правкой файла CONFIG.NT
Может оказаться что твой FPD использует 1Мб оперативки и тормозит из-за этого. Как проверить не скажу, должна быть какая-то функция для получения используемой памяти, давно с FPD не сталкивался, сейчас даже запустить негде. Win7x64 не дает досовские проги запускать.
Остались дистрибутивы одной досовской проги, там такое было:
В файл CONFIG.SYS (он же CONFIG.NT в 2000/XP) добавить
Код: plaintext
1.
2.
3.
4.
dos=high,umb
device=c:\windows\himem.sys
device=c:\windows\emm386.exe ram
files= 100 
buffers= 60 
Что это означает уже смутно помню, поэтому не буду умничать, если интересно - поищи в инете.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37502757
СТАРЧЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Да это срабатывает, но у меня админы это прописывают всем, ток с более оптимальными параметрами.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос Fox 2.6
    #37503195
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если условиям, указанным в Locate может удолвлетворять не более, чем 1 запись, то можно и запросом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Select ;
	Int(S.kgr/ 100000 ) As RG, ;
	S.kgr As kgr, ;
	S.KLIENT As KLIENT, ;
	S.NTR As NTR, ;
	SPACE( 49 ) As GR, ;
	S.Mod As Mod, ;
	S.KB As KOL, ;
	S.ZN As CEN, ;
	S.DATOT As DATOT, ;
	 0000000000 . 00  As SUME, ;
	S.NPR, ;
	S.NPD, ;
	 00  As Coll, ;
	P_SNCEN.Coll As TM ;
FROM ;
	T0404038 S, ;
	P_SNCEN ;
Into Table SNCEN.Dbf ;
WHERE ;
		P_SNCEN.NPR = S.NPR ;
	.And. P_SNCEN.NPD = S.NPD ;
	.And. P_SNCEN.DATD <= _DATK ;
	.And. P_SNCEN.Type = _Type ;
	.And. S.DATOT>=_DATN ;
	.And. S.DATOT<=_DATK ;
	.And. S.kop<> 3  ;
	.And. S.NPR> 0 

select SNCEN
replace FOR SEEK(str(SNCEN.Mod, 8 ),"t1082") Coll with t1082.nk



И еще, надеюсь, Вы в курсе, что для того, чтобы команда LOCATE работала быстрее необходимо преварительно отключить главный индекс в той рабочей области, где выполняется Locate

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Для ускорения последующих Locate при поиске в P_SNCEN
select P_SNCEN
SET ORDER TO  0 

_Npd= 0 
Sele SNCEN
Scan
	(...)
EndScan
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос Fox 2.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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