Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Тормоза, однако ... (число прочтений - 3142 )
U_zer
Экс-Участник


Тормоза, однако ...
24. Декабря 2008 :: 07:36
Печать  
Всем привет!

Вот запросик в проведении документа, который начал тормозить прямо пропорционально количеству строк в документе. Помогите пожалуйста выловить косяк!

Код
Выбрать все
	Запрос = СоздатьОбъект("OdbcRecordSet");
	ТабРез = СоздатьОбъект("Addin.ValTable");
	MW = СоздатьОбъект("MetaDataWork");
	Запрос.РежимRPC(1);
	ьПозициюДокумента(ТекущийДокумент())));
	Запрос.УстановитьТекстовыйПараметр("ТД", ТекущийДокумент());
	Запрос.УстановитьТекстовыйПараметр("Склад", загСклад);
	Запрос.УстановитьТекстовыйПараметр("Раб", enum.ВидыТоваров.Работа);

	ТЗ = "
	|select
	|БигС.НомСтр [НомСтр $число],
	|БигС.Тов [Товар $Спраочник.Товары],
	|БигС.Скл [Склад $Справочник.Склады],
	|БигС.Док [Док $Документ],
	|БигС.ДДок [ДДок $Дата],
	|БигС.КонОст [КонОст $число],
	|БигС.СумБаз [СумБаз $число],
	|БигС.СумВал [СумВал $число]
	|from
	|(select
	|ДокС.lineNO_ НомСтр,
	|$ДокС.табТовар Тов,
	|case
	|	when $ДокС.табСклад = $ПустойИД then :Склад
	|	else $ДокС.табСклад
	|end Скл ,
	|null Док,
	|null ДДок,
	|0 КонОст,
	|0 СумБаз,
	|0 СумВал
	|from $ДокументСтроки.РасходнаяНакл ДокС
	|inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = $ДокС.табТовар
	|Where ДокС.iddoc = :ТД and $ДокС.табКоличество>0 and $СпрТ.спрВидТовара <> :Раб
	|union
	|select
	|null,
	|РегОст.измТовар,
	|РегОст.измСклад,
	|РегОст.измДокумент,
	|max(Left(j.Date_Time_iddoc,8)),
	|Min(РегОст.ресКоличествоОстаток),
	|Min(РегОст.ресСуммаБазОстаток),
	|Min(РегОст.ресСуммаВалОстаток)
	|from $РегистрОстатки.Товары(:ДатаН, inner join (
	|								select distinct
	|									$Д.табТовар Тов,
	|									Case
	|									when $Д.табСклад = $ПустойИД then :Склад
	|									else $Д.табСклад end Скл
	|								from $ДокументСтроки.РасходнаяНакл Д
	|								inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = $Д.табТовар
	|								where Д.iddoc = :ТД and $Д.табКоличество>0 and $СпрТ.спрВидТовара <> :Раб) ДокС on ДокС.Тов = измТовар and ДокС.Скл = измСклад, , (измТовар, измСклад, измДокумент), (ресКоличество, ресСуммаБаз, ресСуммаВал)
	|) РегОст
	|left join _1sjourn j (nolock) on j.iddoc = Right(РегОст.измДокумент,9)
	|group by
	|РегОст.измТовар,
	|РегОст.измСклад,
	|РегОст.измДокумент
	|having Min(РегОст.ресКоличествоОстаток)>0
	|) БигС
	|";

	ТабРез.Загрузить(Запрос.ВыполнитьИнструкцию(ТЗ));
 

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Тормоза, однако ...
Ответ #1 - 24. Декабря 2008 :: 07:43
Печать  
А union зачем между ТЧ и ВТ, может левое/внутреннее соединение?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Тормоза, однако ...
Ответ #2 - 24. Декабря 2008 :: 07:48
Печать  
Вадимко писал(а) 24. Декабря 2008 :: 07:43:
А union зачем между ТЧ и ВТ, может левое/внутреннее соединение?


А если одинаковые строки?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Тормоза, однако ...
Ответ #3 - 24. Декабря 2008 :: 07:51
Печать  
ХЗ... я группировал строки в подзапросе и его объединял с подзапросом по 2 ВТ и своей табличкой, вроде все нормально и на тысячах строк (т-т-т)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Тормоза, однако ...
Ответ #4 - 24. Декабря 2008 :: 08:02
Печать  
Если база скульная, давно ли переиндексацию делал?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Тормоза, однако ...
Ответ #5 - 24. Декабря 2008 :: 08:25
Печать  
sml писал(а) 24. Декабря 2008 :: 08:02:
Если база скульная, давно ли переиндексацию делал?


Только что ...
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Тормоза, однако ...
Ответ #6 - 24. Декабря 2008 :: 08:28
Печать  
Вадимко писал(а) 24. Декабря 2008 :: 07:51:
ХЗ... я группировал строки в подзапросе и его объединял с подзапросом по 2 ВТ и своей табличкой, вроде все нормально и на тысячах строк (т-т-т)

Да, а кстати, если по остаткам товара 0, то и строка с этим товаром не приджойнится, а этого мне не надо ...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тормоза, однако ...
Ответ #7 - 24. Декабря 2008 :: 08:38
Печать  
Цитата:
sml писал(а) 24. Декабря 2008 :: 08:02:
Если база скульная, давно ли переиндексацию делал?


Только что ...

статистику еще бы обновить
  

1&&2&&3
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Тормоза, однако ...
Ответ #8 - 24. Декабря 2008 :: 08:45
Печать  
trad писал(а) 24. Декабря 2008 :: 08:38:
Цитата:
sml писал(а) 24. Декабря 2008 :: 08:02:
Если база скульная, давно ли переиндексацию делал?


Только что ...

статистику еще бы обновить

Дык подразумевается, что SQL2005 сам ее периодически обновляет. Да я уж на тестовой базе вче что мог переделал. Меня интересует именно ускорение запроса!
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Тормоза, однако ...
Ответ #9 - 24. Декабря 2008 :: 11:11
Печать  
может
Код
Выбрать все
select distinct
	|									$Д.табТовар Тов,
	|									Case
	|									when $Д.табСклад = $ПустойИД then :Склад
	|									else $Д.табСклад end Скл
	|								from $ДокументСтроки.РасходнаяНакл Д
	|								inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = $Д.табТовар
	|								where Д.iddoc = :ТД and $Д.табКоличество>0 and $СпрТ.спрВидТовара <> :Раб 


загнать в темп таблицу с индексами а потом ее и джойнить
  
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Тормоза, однако ...
Ответ #10 - 24. Декабря 2008 :: 12:14
Печать  
villy писал(а) 24. Декабря 2008 :: 11:11:
загнать в темп таблицу с индексами а потом ее и джойнить


Да, стало шустрее, хотя, непонятно почему ...
Запрос вроде 1 раз выполняется, какой смысл создавать темповую таблицу ...
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Тормоза, однако ...
Ответ #11 - 25. Декабря 2008 :: 08:16
Печать  
Цитата:
villy писал(а) 24. Декабря 2008 :: 11:11:
загнать в темп таблицу с индексами а потом ее и джойнить


Да, стало шустрее, хотя, непонятно почему ...
Запрос вроде 1 раз выполняется, какой смысл создавать темповую таблицу ...

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