Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема оптимизация получения переодических реквизитов справочника DBF (число прочтений - 2618 )
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
оптимизация получения переодических реквизитов справочника DBF
02. Мая 2013 :: 16:49
Печать  
база дбф.
Необходимо ограничить просмотр одной папки в форме списка справочника контрагены.
В Спр.Контрагенты переодический реквизит Филиал
Спр.Контрагенты ~ 3000 шт
время выполнения запроса ~ 8 сек.

Можно быстрее?

Сам запрос:
Код
Выбрать все
			|SELECT
			|	СпрК.id as [Контрагент $Справочник.Контрагенты],
			|	СпрК.IsFolder as Папка,
			|	СпрК.Descr as Наименование,
			|	IIF(СпрК.IsFolder = 1, СпрК.id, СпрК.ParentID) as Sort
			//|	Контрагенты.Филиал as [Филиал $Справочник.МестаХранения]
			|FROM
			|	$Справочник.Контрагенты AS СпрК
			|LEFT JOIN (
			|	SELECT
			|		Период.objid as objid,
			|		Период.value as Филиал
			|	FROM 1sconst as Период
			|	WHERE
			|		Период.date IN
			|		(SELECT
			|			MAX(Константа.date)
			|		FROM 1sconst as Константа
			|		WHERE
			|			Константа.id = $ИсторияРеквизита.Контрагенты.Филиал AND
			|			Константа.objid = Период.objid AND
			|			Константа.date <= :ВыбДата~~
			|		)
			|		AND Период.id = $ИсторияРеквизита.Контрагенты.Филиал
			|	) as Контрагенты ON Контрагенты.objid = СпрК.id
			|WHERE
			|	(((Контрагенты.Филиал = :Филиал) AND (СпрК.ParentID = :Покупатели2)) OR (СпрК.ParentID != :Покупатели2))
			//|	(( (Контрагенты.Филиал = :Филиал) AND (СпрК.ParentID IN ('"+Покупатели+"')) ) OR (СпрК.ParentID NOT IN ('"+Покупатели+"'))  )
			|ORDER BY
			|	Sort,Папка,Наименование
			|";                                                              

 


  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Получилось лучьше
Ответ #1 - 03. Мая 2013 :: 07:12
Печать  
Используем индекс IDD из 1sconst.dbf
id+objid+DTOS(date)+time+docid+STR(partno,3)
Время выполнения заметно уменьшилось
Запрос длился 0.362сек.

Можно  еще быстрее?

Код
Выбрать все
			|SELECT
			|	СпрК.id as [Контрагент $Справочник.Контрагенты],
			|	СпрК.IsFolder as Папка,
			|	СпрК.Descr as Наименование,
			|	IIF(СпрК.IsFolder = 1, СпрК.id, СпрК.ParentID) as Sort
			|FROM
			|	$Справочник.Контрагенты AS СпрК
			|LEFT JOIN (
			|	SELECT
			|		Период.objid as objid,
			|		Период.value as Филиал
			|	FROM 1sconst as Период
			|	WHERE
			|		tno,3)
			|		____'+'___')
			|		AND Период.date IN
			|			(SELECT
			|				MAX(Константа.date)
			|			FROM 1sconst as Константа
			|			WHERE
			|				+STR(Константа.partno,3)
			|				____'+'___')
			|				AND Константа.objid = Период.objid
			|				AND Константа.date <= :ВыбДата~~
			|			)
			|	) as Контрагенты ON Контрагенты.objid = СпрК.id
			|WHERE
			|	(((Контрагенты.Филиал = :Филиал) AND (СпрК.ParentID = :Покупатели2)) OR (СпрК.ParentID != :Покупатели2))
			|ORDER BY
			|	Sort,Папка,Наименование
			|";                                                              
 




Using index tag Idd to rushmore optimize table период
Rushmore optimization level for table период: partial
Using index tag Idd to rushmore optimize table константа
Rushmore optimization level for table константа: partial
Rushmore optimization level for intermediate result: none
Joining intermediate result and table константа (Cartesian product)
Using index tag Idd to rushmore optimize table период
Rushmore optimization level for table период: partial
Rushmore optimization level for intermediate result: none
Joining table период and intermediate result (Cartesian product)
Using index tag Code to rushmore optimize table спрк
Rushmore optimization level for table спрк: partial
Rushmore optimization level for intermediate result: none
Joining table спрк and intermediate result using temp index
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: оптимизация получения переодических реквизитов справочника DBF
Ответ #2 - 03. Мая 2013 :: 11:29
Печать  
А можно пойти в обход, добавить непереодический реквизит в контрагенты в который записывать последнее значение переодического, тобишь тот пусть будет для истории а служебный для отбора, будет всяко быстрее любых оптимизаций с периодикой.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать