Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Возможно ли оптимизировать запрос к dbf (число прочтений - 7046 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #30 - 05. Июля 2012 :: 11:21
Печать  
приведи полный текст запроса + строку подключения и установки
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #31 - 05. Июля 2012 :: 11:39
Печать  
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|	DISTINCT $СпрАналоги.КодАналогов                      AS КодАналогов,
	|	СпрН.ID                                               AS [Ссылка $Справочник.Номенклатура],
	|	СпрН.descr                                            AS Наименование,
	|	ИтогиПартииТоваров.ИтОстаток                          AS Остаток,
	|	CAST(ИтогиПартииТоваров.ИтСтоимость AS NUMERIC(15,2)) AS Стоимость,
	|	CAST(ИтогиПартииТоваров.ИтНДС AS NUMERIC(15,2))       AS НДС
	|FROM
	|	$Справочник.Аналоги AS СпрАналоги
	|LEFT JOIN 	$Справочник.Номенклатура AS СпрН
	|		ON СпрН.parentid+STR(СпрН.IsFolder,1)+UPPER(СпрН.sp3163)+UPPER(СпрН.descr)
	|			LIKE _______________________________________________________________')
	|		   AND (СпрН.IsMark = '')
	//|		ON (UPPER(СпрН.sp3163)+UPPER(СпрН.descr))
	//|			LIKE _______________________________________________')
	//|		   AND (СпрН.IsFolder = 2)
	//|		   AND (СпрН.IsMark = '')
	|LEFT JOIN (
	|           SELECT
	|				ИтогиПартии.SP279 AS ТоварID,
	|				SUM(ИтогиПартии.SP285) AS ИтОстаток,
	|				SUM(ИтогиПартии.SP286) AS ИтСтоимость,
	|				SUM(ИтогиПартии.SP288) AS ИтНДС
	|			FROM
	|				$РегистрИтоги.ПартииТоваров AS ИтогиПартии
	|			WHERE
	|				DTOS(ИтогиПартии.period)+$ИтогиПартии.Товар
	|				LIKE  (DTOS(:НачПериод~~)+'_________')
	|           GROUP BY
	|				ИтогиПартии.SP279
	|			) AS ИтогиПартииТоваров
	|			ON ИтогиПартииТоваров.ТоварID = СпрН.ID
	|WHERE
	|	UPPER(СпрАналоги.sp3058)+UPPER(СпрАналоги.code)
	|	LIKE (:Артикул+'__________')
	|	AND СпрАналоги.IsMark = ''
	|";                                                              

	вр1 = _GetPerformanceCounter();
	База = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Рез = База.Соединение(Соединение);
    Если Рез=0 Тогда
        Сообщить("Подключение к БД не выполнено!", "!");
    КонецЕсли;
    

	Запрос = База.СоздатьКоманду();
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");

    Запрос = База.СоздатьКоманду();
	Запрос.Отладка(1);
	Запрос.УстановитьТекстовыйПараметр("Артикул", ВРЕГ(СтрокаПоиска));
	мд = СоздатьОбъект("MetaDataWork");
	уТА()));
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    
	Запрос.Закрыть();
    Запрос = 0;
    База.Закрыть();
    База = 0;
    вр2 = _GetPerformanceCounter();
    Сообщить("Время " + Строка(вр2 - вр1) + "мск.");
 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #32 - 05. Июля 2012 :: 11:44
Печать  
блин..
нафига вот так писать в тексте запроса ?
СпрН.sp3163

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


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #33 - 05. Июля 2012 :: 11:46
Печать  
Щас переделаю
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #34 - 05. Июля 2012 :: 11:54
Печать  
Проверяешь потом в обработке от kiruha ?
по-отдельности, вот такой запрос тоже не "подбирает индекс" ?
Код
Выбрать все
|SELECT
|	СпрН.ID AS [Ссылка $Справочник.Номенклатура]
|FROM
|	$Справочник.Аналоги AS СпрАналоги
|LEFT JOIN 	$Справочник.Номенклатура AS СпрН
|		ON (СпрН.parentid+STR(СпрН.IsFolder,1)+UPPER($СпрН.КодАналогов)+UPPER(СпрН.descr)
|			LIKE ('_________'+'2'+UPPER($СпрАналоги.КодАналогов)+'%'))
|		   AND (СпрН.IsMark = '') 

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


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #35 - 05. Июля 2012 :: 11:56
Печать  
Да индексы проверяю

Всегда так:

Использование индекс тэг Idd для оптимизации по технологии Rushmore таблица спрн
Уровень оптимизации Rushmore для таблица спрн: частичная


Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|	DISTINCT $СпрАналоги.КодАналогов                      AS КодАналогов,
	|	СпрН.ID                                               AS [Ссылка $Справочник.Номенклатура],
	|	СпрН.descr                                            AS Наименование,
	|	ИтогиПартииТоваров.ИтОстаток                          AS Остаток,
	|	CAST(ИтогиПартииТоваров.ИтСтоимость AS NUMERIC(15,2)) AS Стоимость,
	|	CAST(ИтогиПартииТоваров.ИтНДС AS NUMERIC(15,2))       AS НДС
	|FROM
	|	$Справочник.Аналоги AS СпрАналоги
	|LEFT JOIN 	$Справочник.Номенклатура AS СпрН
	|		ON СпрН.parentid+STR(СпрН.IsFolder,1)+UPPER($СпрН.КодАналогов)+UPPER(СпрН.descr)
	|			LIKE _____________________________________________________________________')
	|		   AND (СпрН.IsMark = '')
	//|		ON (UPPER($СпрН.КодАналогов)+UPPER(СпрН.descr))
	//|			LIKE _____________________________________________________')
	//|		   AND (СпрН.IsFolder = 2)
	//|		   AND (СпрН.IsMark = '')
	|LEFT JOIN (
	|           SELECT
	|				$ИтогиПартии.Товар AS ТоварID,
	|				SUM($ИтогиПартии.ОстатокТовара) AS ИтОстаток,
	|				SUM($ИтогиПартии.Стоимость) AS ИтСтоимость,
	|				SUM($ИтогиПартии.НДС) AS ИтНДС
	|			FROM
	|				$РегистрИтоги.ПартииТоваров AS ИтогиПартии
	|			WHERE
	|				DTOS(ИтогиПартии.period)+$ИтогиПартии.Товар
	|				LIKE  (DTOS(:НачПериод~~)+'_________')
	|           GROUP BY
	|				$ИтогиПартии.Товар
	|			) AS ИтогиПартииТоваров
	|			ON ИтогиПартииТоваров.ТоварID = СпрН.ID
	|WHERE
	|	UPPER($СпрАналоги.Артикул)+UPPER(СпрАналоги.code)
	|	LIKE (:Артикул+'__________')
	|	AND СпрАналоги.IsMark = ''
	|";                                                              

	вр1 = _GetPerformanceCounter();
	База = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Рез = База.Соединение(Соединение);
    Если Рез=0 Тогда
        Сообщить("Подключение к БД не выполнено!", "!");
    КонецЕсли;
    

	Запрос = База.СоздатьКоманду();
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");

    Запрос = База.СоздатьКоманду();
	Запрос.Отладка(1);
	Запрос.УстановитьТекстовыйПараметр("Артикул", ВРЕГ(СтрокаПоиска));
	мд = СоздатьОбъект("MetaDataWork");
	уТА()));
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    
	Запрос.Закрыть();
    Запрос = 0;
    База.Закрыть();
    База = 0;
    вр2 = _GetPerformanceCounter();
    Сообщить("Время " + Строка(вр2 - вр1) + "мск.");
 


  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 
ОтправитьПечать