|
Оптимизация Партионного запроса УПП 1.3.18 | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
30.11.11
✎
00:11
|
Памяти v8: Влияет ли Индексация на скорость выполнения запроса и многих предыдущих веток посвящается.
Вон моя переделка, пожалуйста критикуем. //Оптимизированные запросы Процедура оптЗаполнитьЗапросПартийНаСкладахУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ, ОсновнойДокументЯвляетсяРегистратором) Экспорт ПараметрыЗапроса_ДатаОприходования = УправлениеЗапасамиПартионныйУчет.ПолучитьДанныеДляЗапроса_ДокументОприходованияДата(СпособОценкиМПЗ,"ПартииТоваровНаСкладах"); Если ОсновнойДокументЯвляетсяРегистратором=Истина Тогда ТекстОсобоСписанныхТоваров=""; ТекстСписанныхТоваров= "ВЫБРАТЬ | СписанныеТовары.НомерСтрокиДокумента, | СписанныеТовары.Номенклатура, | СписанныеТовары.ХарактеристикаНоменклатуры, | СписанныеТовары.СерияНоменклатуры, | СписанныеТовары.Склад, | СписанныеТовары.ДокументПартии, | СписанныеТовары.ЗаказПартии, | СписанныеТовары.КодОперацииПартииТоваров, | СписанныеТовары.Качество, | СписанныеТовары.ДопустимыйСтатус1, | СписанныеТовары.ДопустимыйСтатус2, | СписанныеТовары.ДопустимыйСтатус3, | СписанныеТовары.ДопустимыйСтатус4, | СписанныеТовары.СписыватьТолькоПоЗаказу |ПОМЕСТИТЬ СписанныеТовары |ИЗ | РегистрСведений.СписанныеТовары КАК СписанныеТовары |ГДЕ | СписанныеТовары.Регистратор = &Ссылка |; |"; Иначе ТекстОсобоСписанныхТоваров= "ВЫБРАТЬ | СписанныеТовары.НомерСтрокиДокумента, | СписанныеТовары.Номенклатура, | СписанныеТовары.ХарактеристикаНоменклатуры, | СписанныеТовары.СерияНоменклатуры, | СписанныеТовары.Склад, | СписанныеТовары.ДокументПартии, | СписанныеТовары.ЗаказПартии, | СписанныеТовары.КодОперацииПартииТоваров, | СписанныеТовары.Качество, | СписанныеТовары.ДопустимыйСтатус1, | СписанныеТовары.ДопустимыйСтатус2, | СписанныеТовары.ДопустимыйСтатус3, | СписанныеТовары.ДопустимыйСтатус4, | СписанныеТовары.СписыватьТолькоПоЗаказу |ПОМЕСТИТЬ ОсобоСписанныеТовары |ИЗ | РегистрСведений.СписанныеТовары КАК СписанныеТовары |ГДЕ | СписанныеТовары.Регистратор = &ОсновнойДокумент |; |"; ТекстСписанныхТоваров= "ВЫБРАТЬ | СписанныеТовары.Номенклатура, | СписанныеТовары.Склад |ПОМЕСТИТЬ СписанныеТовары |ИЗ | РегистрСведений.СписанныеТовары КАК СписанныеТовары |ГДЕ | СписанныеТовары.Регистратор = &Ссылка |; |"; КонецЕсли; Запрос.Текст=ТекстОсобоСписанныхТоваров+ТекстСписанныхТоваров+ "ВЫБРАТЬ | СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | ПартииТоваровНаСкладах.Номенклатура, | ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования, | "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Выбор+" | ПартииТоваровНаСкладах.Склад, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, | ПартииТоваровНаСкладах.СерияНоменклатуры, | ПартииТоваровНаСкладах.Качество, | ПартииТоваровНаСкладах.Заказ, | ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество, | ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость, | ПартииТоваровНаСкладах.СтатусПартии, | ВЫБОР | КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ КАК ЧислоСерияНоменклатуры, | ВЫБОР | КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО | ТОГДА 0 | ИНАЧЕ ВЫБОР | КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ | КОНЕЦ КАК ЧислоДокументОприходования, | ВЫБОР | КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО | ТОГДА 0 | ИНАЧЕ ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ КАК ЧислоЗаказ, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ЧислоСтатусПартии |ИЗ | "+?(ОсновнойДокументЯвляетсяРегистратором,"СписанныеТовары","ОсобоСписанныеТовары")+" КАК СписанныеТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки( | &Дат, | Организация = &Организация | И ВЫБОР | КОГДА &ВестиПартионныйУчетПоСкладам = ЛОЖЬ | ИЛИ Склад = &ПустойСклад | ТОГДА Номенклатура В | (ВЫБРАТЬ | СписанныеТовары.Номенклатура | ИЗ | СписанныеТовары КАК СписанныеТовары) | ИНАЧЕ (Номенклатура, Склад) В | (ВЫБРАТЬ | СписанныеТовары.Номенклатура, | СписанныеТовары.Склад | ИЗ | СписанныеТовары КАК СписанныеТовары) | КОНЕЦ) КАК ПартииТоваровНаСкладах | ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры | И (ВЫБОР | КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество | ТОГДА ИСТИНА | ИНАЧЕ ВЫБОР | КОГДА СписанныеТовары.Качество = &ПустоеКачество | ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый | ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество | КОНЕЦ | КОНЕЦ) | И (ВЫБОР | КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус | ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус | ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3 | ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4 | ИНАЧЕ ИСТИНА | КОНЕЦ) | И (ВЫБОР | КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА | ТОГДА ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии | ТОГДА ВЫБОР | КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО) | ТОГДА ЛОЖЬ | ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | КОНЕЦ | ИНАЧЕ ИСТИНА | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии | ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ | ИНАЧЕ ИСТИНА | КОНЕЦ | КОНЕЦ) | И (ЛОЖЬ ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры | ИЛИ СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры) | И (ВЫБОР | КОГДА &ВестиПартионныйУчетПоСкладам = ЛОЖЬ | ТОГДА ИСТИНА | ИНАЧЕ ПартииТоваровНаСкладах.Склад = &ПустойСклад | ИЛИ ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад | КОНЕЦ) | |УПОРЯДОЧИТЬ ПО | ЧислоСерияНоменклатуры, | ЧислоДокументОприходования, | ЧислоЗаказ, | ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ", | "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Сортировка+" | ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ", | ПартииТоваровНаСкладах.Склад |ИТОГИ ПО | НомерСтрокиДокумента"; Запрос.УстановитьПараметр("ВестиПартионныйУчетПоСкладам",ВестиПартионныйУчетПоСкладам); КонецПроцедуры // ЗаполнитьЗапросПартийНаСкладахУпр() |
|||
1
H A D G E H O G s
30.11.11
✎
00:54
|
ап
|
|||
2
MikleV
30.11.11
✎
00:57
|
где замеры, тестовые данные, обоснование за счет чего планируется повышение скорости выполнения запроса?
или мы сферического коня в вакууме обсуждаем? |
|||
3
МихаилМ
30.11.11
✎
01:01
|
учитывая
И ВЫБОР | КОГДА &ВестиПартионныйУчетПоСкладам = ЛОЖЬ | ИЛИ Склад = &ПустойСклад | ТОГДА Номенклатура В | (ВЫБРАТЬ | СписанныеТовары.Номенклатура | ИЗ | СписанныеТовары КАК СписанныеТовары) | ИНАЧЕ (Номенклатура, Склад) В | (ВЫБРАТЬ | СписанныеТовары.Номенклатура, | СписанныеТовары.Склад | ИЗ | СписанныеТовары КАК СписанныеТовары) скл сервер не сможет закешировать пран запроса и будет его строить каждый раз заново ( это может сильно влиять на призводительность) лучше разбить на отдельные запросы. пактически весь текст - бред . налицо болезнь одинесника: перепутали получение и представление данных. допускаю, что родоначалтники бреда разрабы 1с. |
|||
4
MikleV
30.11.11
✎
01:03
|
(3)напиши лучше - чего то тебя не видно в списке разработчиков 1С
|
|||
5
H A D G E H O G s
30.11.11
✎
01:08
|
(2) Обсуждение в (0)
|
|||
6
H A D G E H O G s
30.11.11
✎
01:09
|
скл сервер не сможет закешировать пран запроса
А мы это проверим, но чуть позже. |
|||
7
H A D G E H O G s
30.11.11
✎
01:10
|
Но мысли пошли, это радует.
|
|||
8
H A D G E H O G s
30.11.11
✎
10:34
|
гхммм, как в профайлере отловить событие компиляции плана запроса?
|
|||
9
H A D G E H O G s
30.11.11
✎
12:13
|
Вот мой запрос в sql
SELECT TOP 0 CAST(NULL AS NUMERIC(10,0)) _Q_000_F_000, CAST(NULL AS BINARY(16)) _Q_000_F_001RRef, CAST(NULL AS BINARY(16)) _Q_000_F_002RRef, CAST(NULL AS BINARY(16)) _Q_000_F_003RRef, CAST(NULL AS BINARY(16)) _Q_000_F_004RRef, CAST(NULL AS BINARY(1)) _Q_000_F_005_TYPE, CAST(NULL AS BINARY(4)) _Q_000_F_005_RTRef, CAST(NULL AS BINARY(16)) _Q_000_F_005_RRRef, CAST(NULL AS BINARY(1)) _Q_000_F_006_TYPE, CAST(NULL AS BINARY(4)) _Q_000_F_006_RTRef, CAST(NULL AS BINARY(16)) _Q_000_F_006_RRRef, CAST(NULL AS BINARY(16)) _Q_000_F_007RRef, CAST(NULL AS BINARY(16)) _Q_000_F_008RRef, CAST(NULL AS BINARY(16)) _Q_000_F_009RRef, CAST(NULL AS BINARY(16)) _Q_000_F_010RRef, CAST(NULL AS BINARY(16)) _Q_000_F_011RRef, CAST(NULL AS BINARY(16)) _Q_000_F_012RRef, CAST(NULL AS BINARY(1)) _Q_000_F_013 INTO #tt11 declare P1 varbinary(4); SET P1=0x000001D0 declare @P2 varbinary(16); SET @P2=0xB3330007E92E622811E0DD2667DB3A95 INSERT INTO #tt11 (_Q_000_F_000, _Q_000_F_001RRef, _Q_000_F_002RRef, _Q_000_F_003RRef, _Q_000_F_004RRef, _Q_000_F_005_TYPE, _Q_000_F_005_RTRef, _Q_000_F_005_RRRef, _Q_000_F_006_TYPE, _Q_000_F_006_RTRef, _Q_000_F_006_RRRef, _Q_000_F_007RRef, _Q_000_F_008RRef, _Q_000_F_009RRef, _Q_000_F_010RRef, _Q_000_F_011RRef, _Q_000_F_012RRef, _Q_000_F_013) SELECT T1._Fld16199, T1._Fld16245RRef, T1._Fld16297RRef, T1._Fld16266RRef, T1._Fld16268RRef, T1._Fld16205_TYPE, T1._Fld16205_RTRef, T1._Fld16205_RRRef, T1._Fld16211_TYPE, T1._Fld16211_RTRef, T1._Fld16211_RRRef, T1._Fld16218RRef, T1._Fld16216RRef, T1._Fld16207RRef, T1._Fld16208RRef, T1._Fld16209RRef, T1._Fld16210RRef, T1._Fld16270 FROM _InfoRg16198 T1 WHERE (T1._RecorderTRef = P1 AND T1._RecorderRRef = @P2) declare @f1 datetime, @f2 varbinary(16), @f3 varbinary(4),@f4 varbinary(16),@f5 numeric(1,0),@f6 datetime,@f7 varbinary(1),@f8 varbinary(16); set @f1= {ts '5999-11-01 00:00:00'} set @f2= 0x00000000000000000000000000000000 set @f3= 0x000001D0 set @f4= 0xB3330007E92E622811E0DD2667DB3A95 set @f5= 0 set @f6= {ts '4011-09-12 16:35:33'} set @f7= 0x01 set @f8= 0xAF5195FDB5507EE94CEA7B7AFC2234B3 SELECT T1._Fld16199, T2.Fld18611RRef, T2.Fld18615_TYPE, T2.Fld18615_RTRef, T2.Fld18615_RRRef, T2.Fld18612RRef, T2.Fld18613RRef, T2.Fld18614RRef, T2.Fld18618RRef, T2.Fld18617RRef, T2.Fld18619Balance_, T2.Fld18620Balance_, T2.Fld18616RRef, CASE WHEN (T1._Fld16266RRef = T2.Fld18614RRef) THEN 0.0 ELSE 1.0 END, CASE WHEN (T1._Fld16205_TYPE = 0x01) THEN 0.0 ELSE CASE WHEN (T1._Fld16205_TYPE = T2.Fld18615_TYPE AND T1._Fld16205_RTRef = T2.Fld18615_RTRef AND T1._Fld16205_RRRef = T2.Fld18615_RRRef) THEN 0.0 ELSE 1.0 END END, CASE WHEN (T1._Fld16211_TYPE = 0x01) THEN 0.0 ELSE CASE WHEN (T2.Fld18617RRef = 0x00000000000000000000000000000000) THEN 1.0 ELSE 0.0 END END, CASE WHEN (T2.Fld18616RRef = 0x8F5D1CF731244BA34E920A7391397751) THEN 1.0 ELSE 0.0 END FROM _InfoRg16198 T1 INNER JOIN (SELECT T3.Fld18611RRef AS Fld18611RRef, T3.Fld18612RRef AS Fld18612RRef, T3.Fld18613RRef AS Fld18613RRef, T3.Fld18614RRef AS Fld18614RRef, T3.Fld18615_TYPE AS Fld18615_TYPE, T3.Fld18615_RTRef AS Fld18615_RTRef, T3.Fld18615_RRRef AS Fld18615_RRRef, T3.Fld18616RRef AS Fld18616RRef, T3.Fld18617RRef AS Fld18617RRef, T3.Fld18618RRef AS Fld18618RRef, CAST(SUM(T3.Fld18620Balance_) AS NUMERIC(38, 8)) AS Fld18620Balance_, CAST(SUM(T3.Fld18619Balance_) AS NUMERIC(38, 8)) AS Fld18619Balance_ FROM (SELECT T4._Fld18611RRef AS Fld18611RRef, T4._Fld18612RRef AS Fld18612RRef, T4._Fld18613RRef AS Fld18613RRef, T4._Fld18614RRef AS Fld18614RRef, T4._Fld18615_TYPE AS Fld18615_TYPE, T4._Fld18615_RTRef AS Fld18615_RTRef, T4._Fld18615_RRRef AS Fld18615_RRRef, T4._Fld18616RRef AS Fld18616RRef, T4._Fld18617RRef AS Fld18617RRef, T4._Fld18618RRef AS Fld18618RRef, CAST(SUM(T4._Fld18620) AS NUMERIC(33, 8)) AS Fld18620Balance_, CAST(SUM(T4._Fld18619) AS NUMERIC(32, 8)) AS Fld18619Balance_ FROM _AccumRgT18637 T4 WHERE T4._Period = @f1 AND ((((T4._Fld23908RRef = @f2) AND T4._Fld18611RRef IN (SELECT T5._Fld16245RRef AS Q_001_F_000RRef FROM _InfoRg16198 T5 WHERE (T5._RecorderTRef = @f3 AND T5._RecorderRRef = @f4))) AND (T4._Fld18612RRef IN (SELECT T6._Fld16268RRef AS Q_002_F_000RRef FROM _InfoRg16198 T6 WHERE (T6._RecorderTRef = @f3 AND T6._RecorderRRef = @f4)) OR (T4._Fld18612RRef = @f2)))) GROUP BY T4._Fld18611RRef, T4._Fld18612RRef, T4._Fld18613RRef, T4._Fld18614RRef, T4._Fld18615_TYPE, T4._Fld18615_RTRef, T4._Fld18615_RRRef, T4._Fld18616RRef, T4._Fld18617RRef, T4._Fld18618RRef HAVING (CAST(SUM(T4._Fld18620) AS NUMERIC(33, 8))) <> @f5 OR (CAST(SUM(T4._Fld18619) AS NUMERIC(32, 8))) <> @f5 UNION ALL SELECT T7._Fld18611RRef AS Fld18611RRef, T7._Fld18612RRef AS Fld18612RRef, T7._Fld18613RRef AS Fld18613RRef, T7._Fld18614RRef AS Fld18614RRef, T7._Fld18615_TYPE AS Fld18615_TYPE, T7._Fld18615_RTRef AS Fld18615_RTRef, T7._Fld18615_RRRef AS Fld18615_RRRef, T7._Fld18616RRef AS Fld18616RRef, T7._Fld18617RRef AS Fld18617RRef, T7._Fld18618RRef AS Fld18618RRef, CAST(CAST(SUM(CASE WHEN T7._RecordKind = 0.0 THEN -T7._Fld18620 ELSE T7._Fld18620 END) AS NUMERIC(27, 8)) AS NUMERIC(27, 2)) AS Fld18620Balance_, CAST(CAST(SUM(CASE WHEN T7._RecordKind = 0.0 THEN -T7._Fld18619 ELSE T7._Fld18619 END) AS NUMERIC(26, 8)) AS NUMERIC(27, 3)) AS Fld18619Balance_ FROM _AccumRg18610 T7 WHERE (T7._Period > @f6 OR T7._Period = @f6 AND (T7._RecorderTRef > @f3 OR T7._RecorderTRef = @f3 AND T7._RecorderRRef >= @f4)) AND T7._Period < @f1 AND T7._Active = @f7 AND ((((T7._Fld23908RRef = @f2) AND T7._Fld18611RRef IN (SELECT T8._Fld16245RRef AS Q_001_F_000RRef FROM _InfoRg16198 T8 WHERE (T8._RecorderTRef = @f3 AND T8._RecorderRRef = @f4))) AND (T7._Fld18612RRef IN (SELECT T9._Fld16268RRef AS Q_002_F_000RRef FROM _InfoRg16198 T9 WHERE (T9._RecorderTRef = @f3 AND T9._RecorderRRef = @f4)) OR (T7._Fld18612RRef = @f2)))) GROUP BY T7._Fld18611RRef, T7._Fld18612RRef, T7._Fld18613RRef, T7._Fld18614RRef, T7._Fld18615_TYPE, T7._Fld18615_RTRef, T7._Fld18615_RRRef, T7._Fld18616RRef, T7._Fld18617RRef, T7._Fld18618RRef HAVING (CAST(CAST(SUM(CASE WHEN T7._RecordKind = 0.0 THEN -T7._Fld18620 ELSE T7._Fld18620 END) AS NUMERIC(27, 8)) AS NUMERIC(27, 2))) <> @f5 OR (CAST(CAST(SUM(CASE WHEN T7._RecordKind = 0.0 THEN -T7._Fld18619 ELSE T7._Fld18619 END) AS NUMERIC(26, 8)) AS NUMERIC(27, 3))) <> @f5) T3 GROUP BY T3.Fld18611RRef, T3.Fld18612RRef, T3.Fld18613RRef, T3.Fld18614RRef, T3.Fld18615_TYPE, T3.Fld18615_RTRef, T3.Fld18615_RRRef, T3.Fld18616RRef, T3.Fld18617RRef, T3.Fld18618RRef HAVING (CAST(SUM(T3.Fld18620Balance_) AS NUMERIC(38, 8))) <> @f5 OR (CAST(SUM(T3.Fld18619Balance_) AS NUMERIC(38, 8))) <> @f5) T2 ON (((((((T1._Fld16245RRef = T2.Fld18611RRef) AND (T1._Fld16297RRef = T2.Fld18613RRef)) AND CASE WHEN (T2.Fld18618RRef = 0x00000000000000000000000000000000) THEN 0x01 ELSE CASE WHEN (T1._Fld16216RRef = 0x00000000000000000000000000000000) THEN CASE WHEN (T2.Fld18618RRef = 0xA79841EBE5E5B977449B6BCED05404A0) THEN 0x01 ELSE 0x00 END ELSE CASE WHEN (T2.Fld18618RRef = T1._Fld16216RRef) THEN 0x01 ELSE 0x00 END END END = @f7) AND ((T2.Fld18612RRef = T1._Fld16268RRef) OR (T2.Fld18612RRef = @f2))) AND CASE WHEN ((((T1._Fld16207RRef <> 0x00000000000000000000000000000000) OR (T1._Fld16208RRef <> 0x00000000000000000000000000000000)) OR (T1._Fld16209RRef <> 0x00000000000000000000000000000000)) OR (T1._Fld16210RRef <> 0x00000000000000000000000000000000)) THEN CASE WHEN ((((((T2.Fld18616RRef = 0x00000000000000000000000000000000) OR (T2.Fld18616RRef = 0x9CB60656AEC9EC8A4A11A71D683EBEAE)) OR (T2.Fld18616RRef = T1._Fld16207RRef)) OR (T2.Fld18616RRef = T1._Fld16208RRef)) OR (T2.Fld18616RRef = T1._Fld16209RRef)) OR (T2.Fld18616RRef = T1._Fld16210RRef)) THEN 0x01 ELSE 0x00 END ELSE 0x01 END = @f7) AND CASE WHEN (T1._Fld16270 = 0x01) THEN CASE WHEN (((0x08 <> T1._Fld16211_TYPE OR 0x00000120 <> T1._Fld16211_RTRef OR T2.Fld18617RRef <> T1._Fld16211_RRRef))) THEN CASE WHEN (NOT (((T1._Fld16211_TYPE = 0x01)))) THEN 0x00 ELSE CASE WHEN (T2.Fld18617RRef = 0x00000000000000000000000000000000) THEN 0x01 ELSE 0x00 END END ELSE 0x01 END ELSE CASE WHEN (((0x08 <> T1._Fld16211_TYPE OR 0x00000120 <> T1._Fld16211_RTRef OR T2.Fld18617RRef <> T1._Fld16211_RRRef))) THEN CASE WHEN (T2.Fld18617RRef = 0x00000000000000000000000000000000) THEN 0x01 ELSE 0x00 END ELSE 0x01 END END = @f7) AND (((T1._Fld16266RRef = T2.Fld18614RRef) OR (T2.Fld18614RRef = @f2)) OR (T1._Fld16218RRef = @f8))) WHERE (T1._RecorderTRef = @f3 AND T1._RecorderRRef = @f4) ORDER BY (CASE WHEN (T1._Fld16266RRef = T2.Fld18614RRef) THEN 0.0 ELSE 1.0 END), (CASE WHEN (T1._Fld16205_TYPE = 0x01) THEN 0.0 ELSE CASE WHEN (T1._Fld16205_TYPE = T2.Fld18615_TYPE AND T1._Fld16205_RTRef = T2.Fld18615_RTRef AND T1._Fld16205_RRRef = T2.Fld18615_RRRef) THEN 0.0 ELSE 1.0 END END), (CASE WHEN (T1._Fld16211_TYPE = 0x01) THEN 0.0 ELSE CASE WHEN (T2.Fld18617RRef = 0x00000000000000000000000000000000) THEN 1.0 ELSE 0.0 END END), (CASE WHEN (T2.Fld18616RRef = 0x8F5D1CF731244BA34E920A7391397751) THEN 1.0 ELSE 0.0 END), (T2.Fld18615_TYPE), (T2.Fld18615_RTRef), (T2.Fld18615_RRRef), (T2.Fld18612RRef) TRUNCATE TABLE #tt11 Drop table #tt11 При попытке построить план запроса: Msg 208, Level 16, State 0, Line 27 Invalid object name '#tt11'. |
|||
10
МихаилМ
30.11.11
✎
12:17
|
я думал , Вы умнее.
|
|||
11
H A D G E H O G s
30.11.11
✎
12:17
|
p.s.
По производительности старый запрос duration - 110 новый duration - 130 база 11 гиговая доработанная УПП шка, но 1 пользователь. |
|||
12
H A D G E H O G s
30.11.11
✎
12:18
|
(10) Я думал, что вы - умнее, и догадаетесь, что я не так умен.
|
|||
13
МихаилМ
30.11.11
✎
12:54
|
выкените все case
или вынесите в запрос обертку видно же , какие бредовые having и order by 1c генерит : надо ей помочь также смущает отсутствие NOLOCK |
|||
14
5 Элемент
30.11.11
✎
12:54
|
Надо же еще есть такие которые используют ПУ
|
|||
15
Reaper_1c
30.11.11
✎
12:58
|
(14) +1 Разработчики типовых постоянно эту шляпу оптимизируют - регулярно РАУЗ обновляют...
|
|||
16
Fragster
гуру
30.11.11
✎
17:35
|
(0) переделай на построитель, рваные запросы - зло
|
|||
17
Fragster
гуру
30.11.11
✎
17:36
|
виртуальные таблицы отдельно надо во временную таблицу выносить
|
|||
18
Fragster
гуру
30.11.11
✎
17:38
|
Ну и "выборы" нафиг. кстати, откуда в результирующем запросе HAVING - непонятно
|
|||
19
Fragster
гуру
30.11.11
✎
17:38
|
а, это виртуальная таблица...
|
|||
20
GoldenDawn
30.11.11
✎
17:40
|
(0)не знаю насколько в тему, но не смотря на все глупости в реализации партионного учета на тех базах которые встречались мне замер производительности показывал что запись в базу движений документов занимает в несколько раз больше времени чем собтсвенно исполнение процедуры расчета списания партий
|
|||
21
Fragster
гуру
30.11.11
✎
17:46
|
кстати, порядок следования измерений в комплексных условиях имеет значение, и лучше бы ему совпадать с порядком измерений регистра, т.е. (Склад,Номенклатура) и с индексами индексированной ВТ
|
|||
22
Fragster
гуру
30.11.11
✎
17:48
|
Вот например:
Дает результат
|
|||
23
H A D G E H O G s
30.11.11
✎
18:56
|
(17) О! Счаст попробуем!
|
|||
24
H A D G E H O G s
30.11.11
✎
19:12
|
(21) ВТ не индексированна.
Зачем???? |
|||
25
Reaper_1c
30.11.11
✎
21:51
|
(24) Он про условие виртуальной таблицы. Только совпадения порядка мало - нужно чтобы пропусков не было. Цель - попасть в индекс.
|
|||
26
acsent
30.11.11
✎
21:55
|
(21) Не порядок, а условие по первым измерениям без разрывов
|
|||
27
acsent
30.11.11
✎
21:56
|
Собственно вопрос из (2) не раскрыт.
|
|||
28
Fragster
гуру
01.12.11
✎
09:46
|
(25) ну да
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |