Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Оптимизация запроса... (число прочтений - 4893 )
Pervert
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 28. Августа 2006
Оптимизация запроса...
28. Августа 2006 :: 12:22
Печать  
Есть в 1С такой запрос

ТекстЗапроса="
|Период с ДатаПо по ДатаПо;
|Товар=Регистр.ОстаткиТоваров.Товар;
|Фирма=Регистр.ОстаткиТоваров.Фирма;
|Склад=Регистр.ОстаткиТоваров.Склад;
|Кол=Регистр.ОстаткиТоваров.ОстатокТовара;
|СС=Регистр.ОстаткиТоваров.БазоваяСтоимость;
|Условие(Товар=ВыбТовар);
|Условие(Фирма=ВыбФирма);
|Условие(Склад=СкладНазначение);
|Условие(Кол<0);
|Функция КонКол=КонОст(Кол);
|Функция КонСС=КонОст(СС);";

Который выполняется в цикле (меняется выбтовар). Работает медленно на каждый товар выполенется порядка 115 сек.

После перехода в 1С++ получилось

Процедура ОбработкаПроведения();
RecordSet = СоздатьОбъект("ODBCRecordSet");
Recordset.УстановитьТекстовыйПараметр("ДатаПО", ДатаДок);
Recordset.УстановитьТекстовыйПараметр("ВыбФирма", Фирма);
Recordset.УстановитьТекстовыйПараметр("ВыбСклад", Склад);
Recordset.ДобПараметр(1, 14, 9, 0);
Текст = "
|DECLARE @ВыбТовар char(9)
|SET @ВыбТовар = ?
|Select *
|FROM $РегистрОстатки.ОстаткиТоваров(:ДатаПО,,(Товар=@ВыбТовар and Фирма=:ВыбФирма and Склад=:ВыбСклад),(Товар, Фирма, Склад),(БазоваяСтоимость,ОстатокТовара)) as Остаток
|";
Recordset.Подготовить(Текст);
ПровестиОстатки();
КонецПроцедуры

Процедура ПровестиОстатки()
......
RecordSet.УстПараметр(1, Товар);
Recordset.Отладка(1);
ЗапросОстаток=Recordset.ВыполнитьСкалярный();
......
КонецПроцедуры

Но работать стало не намного быстрее 90-100 секунд.. Как можно ускорить процесс?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #1 - 28. Августа 2006 :: 12:31
Печать  
Если запрос выполняется в цикле, значит ошибка в логике создания отчета.
ИМХО не должно такого быть.
  

FormEx developer
Наверх
www  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #2 - 28. Августа 2006 :: 12:31
Печать  
а ты не пробовал не на каждый товар запрос лепить на на все товары?
мне кажется тут не запрос нада оптимизировать, а алгоритмы...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #3 - 28. Августа 2006 :: 12:32
Печать  
Pervert писал(а) 28. Августа 2006 :: 12:22:
Как можно ускорить процесс?

Получать остатки сразу для всех интересуемых товаров. Одним запросом.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #4 - 28. Августа 2006 :: 12:33
Печать  
Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #5 - 28. Августа 2006 :: 12:36
Печать  
Какое редкое единодушие Улыбка
  

FormEx developer
Наверх
www  
IP записан
 
Pervert
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 28. Августа 2006
Re: Оптимизация запроса...
Ответ #6 - 28. Августа 2006 :: 12:36
Печать  
1500 позиций товаров... скока он это будет считать....
P.S. Может быть проблема в этом в место
|FROM $РегистрОстатки.ОстаткиТоваров(:ДатаПО,,(Товар=@ВыбТовар and Фирма=:ВыбФирма and Склад=:ВыбСклад),(Товар, Фирма, Склад),(БазоваяСтоимость,ОстатокТовара)) as Остаток
надо

|FROM $РегистрОстатки.ОстаткиТоваров(:ДатаПО~,,(Товар=@ВыбТовар and Фирма=:ВыбФирма and Склад=:ВыбСклад),(Товар, Фирма, Склад),(БазоваяСтоимость,ОстатокТовара)) as Остаток

Я просто не могу понять в чем эти две конструкции отличаются...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #7 - 28. Августа 2006 :: 12:39
Печать  
Pervert писал(а) 28. Августа 2006 :: 12:36:
1500 позиций товаров... скока он это будет считать....

зачем для всех считать? Не надо.
Вот сколько у тебя в цикле товаров? Десять? Двадцать? Вот для них и посчитай одним запросом.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #8 - 28. Августа 2006 :: 12:41
Печать  
Pervert писал(а) 28. Августа 2006 :: 12:36:
P.S. Может быть проблема в этом в место
|FROM $РегистрОстатки.ОстаткиТоваров(:ДатаПО,,(Товар=@ВыбТовар and Фирма=:ВыбФирма and Склад=:ВыбСклад),(Товар, Фирма, Склад),(БазоваяСтоимость,ОстатокТовара)) as Остаток
надо

|FROM $РегистрОстатки.ОстаткиТоваров(:ДатаПО~,,(Товар=@ВыбТовар and Фирма=:ВыбФирма and Склад=:ВыбСклад),(Товар, Фирма, Склад),(БазоваяСтоимость,ОстатокТовара)) as Остаток

Я просто не могу понять в чем эти две конструкции отличаются...

Все просто: в первом случае ты получишь остаток на начало дня, а во втором - на конец дня.
  

1&&2&&3
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #9 - 28. Августа 2006 :: 12:42
Печать  
Pervert писал(а) 28. Августа 2006 :: 12:36:
Я просто не могу понять в чем эти две конструкции отличаются...

Почитай в документации про модификаторы.
  

FormEx developer
Наверх
www  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса...
Ответ #10 - 28. Августа 2006 :: 12:59
Печать  
Pervert писал(а) 28. Августа 2006 :: 12:36:
1500 позиций товаров... скока он это будет считать....

1500 боюсь даже предположить...
а вот 2 500 000 считает, типизирует и визуализирует секнд 50-т, а считает кажется секунд 15-ть...
ср-вами 1С аналогичная оперция делается минуту 20-ть примерно, это с визуализацией, если ее убрать то отнимай примерно 80-90% времени на эту самую визулизацию...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать