|
Помогите переписать (оптимизировать) запрос... | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
19.08.11
✎
15:04
|
Вот такой идиотский запрос:
|Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док, ВремТаб |Где док.Ссылка.Проведен = &Ист |И док.СерияПродукции.Код = ВремТаб.НомерРазмера | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, док.Количество Как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.РеализацияТоваровУслуг.Товары Док, ВремТаб |Где док.Ссылка.Проведен = &Ист |И док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док, ВремТаб |Где док.Ссылка.Проведен = &Ист |И док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, док.Количество Как КоличествоВозврат |Из Документ.ВозвратТоваровОтПокупателя.Товары Док, ВремТаб |Где док.Ссылка.Проведен = &Ист |И док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера |) Как ТабРез |Сгруппировать по УникальныйНомерРазмера Опой чувствую, что кривой донельзя... Занимает половину времени заполнения данных... Как бы его переделать? |
1 2 6 18 49 53 110 134 154 195 206 207 |
||
1
Ёпрст
19.08.11
✎
15:07
|
(0) Продать все СП, нанять вминяемых гастробайтеров-кодеров из Индии за вырученные деньги.
Самому в отпуск. |
5 65 |
||
2
mirosh
19.08.11
✎
15:08
|
(0) ну попробуй чтоли сначала каждый запрос сгруппировать - поместить во временную таблицу, а потом уже их объединит. Если нужно - по результирующему запросу опять сгруппировать.
|
5 |
||
3
Ёпрст
19.08.11
✎
15:09
|
>>>док.СерияНоменклатуры.Код это условие вынеси во внешний запрос везде.
|
4 5 |
||
4
Inform
19.08.11
✎
15:11
|
(3) если во внешний вынести сначала будут объединяться большие таблицы, а затем на большую выборку будет накладываться условие, так что перенос условия в основной запрос только усугубит работу.
|
14 |
||
5
ДенисЧ
19.08.11
✎
15:12
|
9 15 |
|||
6
Axel2009
19.08.11
✎
15:14
|
(0) выбери все серии с нужным кодом в ВТ, проиндексируй ВТ и соединяй. и еще реквизит серия номенклатуры проиндексировать в каждом из документов.
|
|||
7
DrHiHi
19.08.11
✎
15:16
|
%)))
|Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док |Где док.Ссылка.Проведен | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, док.Количество Как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.РеализацияТоваровУслуг.Товары Док |Где док.Ссылка.Проведен | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док |Где док.Ссылка.Проведен |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, док.Количество Как КоличествоВозврат |Из Документ.ВозвратТоваровОтПокупателя.Товары Док |Где док.Ссылка.Проведен |) Как ТабРез |ГДЕ ТабРез.СерияНоменклатуры.Код В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВремТаб.НомерРазмера из ВремТаб) |Сгруппировать по УникальныйНомерРазмера |
8 |
||
8
DrHiHi
19.08.11
✎
15:17
|
(7) поправка
ГДЕ ТабРез.УникальныйНомерРазмера.Код В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВремТаб.НомерРазмера из ВремТаб) |
9 |
||
9
ДенисЧ
19.08.11
✎
15:18
|
||||
10
ДенисЧ
19.08.11
✎
15:19
|
Попробую через временные...
|
11 |
||
11
DrHiHi
19.08.11
✎
15:22
|
(10) у тебя ошибка с
|Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док, ВремТаб |Где док.Ссылка.Проведен = &Ист |И док.СерияПродукции.Код = ВремТаб.НомерРазмера тогда лучше сделать внутренне соединение с ВремТаб по док.СерияПродукции.Код = ВремТаб.НомерРазмера или в условие док.СерияПродукции.Код В (Выбрать РАзличные ВремТаб.НомерРазмера из ВремТаб) |
|||
12
Inform
19.08.11
✎
15:25
|
ВЫБРАТЬ
ТЧ.НомерРазмера ПОМЕСТИТЬ ВремТаб ИЗ &тч КАК ТЧ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабРез.УникальныйНомерРазмера, СУММА(ТабРез.КоличествоВыпущено) КАК КоличествоВыпущено, СУММА(ТабРез.КоличествоПродано) КАК КоличествоПродано, СУММА(ТабРез.КоличествоБрак) КАК КоличествоБрак, СУММА(ТабРез.КоличествоВозврат) КАК КоличествоВозврат ИЗ (ВЫБРАТЬ Док.СерияПродукции КАК УникальныйНомерРазмера, Док.Количество КАК КоличествоВыпущено, 0 КАК КоличествоПродано, 0 КАК КоличествоБрак, 0 КАК КоличествоВозврат ИЗ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Док ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТаб КАК ВремТаб ПО Док.СерияПродукции.Код = ВремТаб.НомерРазмера И (Док.Ссылка.Проведен) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Док.СерияНоменклатуры, 0, Док.Количество, 0, 0 ИЗ Документ.РеализацияТоваровУслуг.Товары КАК Док ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТаб КАК ВремТаб ПО Док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера И (Док.Ссылка.Проведен) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Док.СерияНоменклатуры, 0, 0, Док.Количество, 0 ИЗ Документ.ТребованиеНакладная.Материалы КАК Док ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТаб КАК ВремТаб ПО Док.СерияПродукции.Код = ВремТаб.НомерРазмера И (Док.Номенклатура = Док.Продукция) И (Док.СчетЗатрат = &СчетБрак) И (Док.Ссылка.Проведен) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Док.СерияНоменклатуры, 0, 0, 0, Док.Количество ИЗ Документ.ВозвратТоваровОтПокупателя.Товары КАК Док ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТаб КАК ВремТаб ПО Док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера И (Док.Ссылка.Проведен)) КАК ТабРез СГРУППИРОВАТЬ ПО ТабРез.УникальныйНомерРазмера |
13 33 42 |
||
13
mirosh
19.08.11
✎
15:27
|
(12) забыл удалить и проиндексировать временную таблицу
|
21 |
||
14
Ёпрст
19.08.11
✎
15:27
|
(4) неправда.
|
16 |
||
15
Ёпрст
19.08.11
✎
15:27
|
(5) да.
Это быстрее, чем присоединять каждый раз таблицу справочника. |
|||
16
mirosh
19.08.11
✎
15:27
|
(14) ну может СУБД и найдет оптимальный план выполнения запроса. Но это не гарантировано.
|
17 |
||
17
Ёпрст
19.08.11
✎
15:30
|
(16) это очевидно, юнион олл всегда быстрее декартова произведения.
|
|||
18
Ёпрст
19.08.11
✎
15:31
|
(0) Давай, замеряй.. не ленись, все варианты :)
|
|||
19
ДенисЧ
19.08.11
✎
15:31
|
Сделал внутреннее соединение...
План запроса в скуле ухудшился... Вот самый тяжёлый предикат [upp1].[dbo].[_Document565_VT16136].[_Fld16160RRef] as [T10].[_Fld16160RRef]=[@P3] AND [upp1].[dbo].[_Document565_VT16136].[_Fld16145RRef] as [T10].[_Fld16145RRef]=[upp1].[dbo].[_Document565_VT16136].[_Fld16149RRef] as [T10].[_Fld16149RRef] AND PROBE([Bitmap1094],[upp1].[dbo].[_Document565_VT16136].[_Fld16150RRef] as [T10].[_Fld16150RRef]) |
|||
20
ДенисЧ
19.08.11
✎
15:32
|
Попробую условие на серию вынести наружу...
|
23 |
||
21
Inform
19.08.11
✎
15:34
|
(13) В исходном запросе выбирается "*" из ТЗ, там надо по месту смотреть и индексировать.
А удалять ВТ смысла нет они живут пока выполняется пакет. Времена менеджера временных таблиц давно прошли... |
22 23 |
||
22
mirosh
19.08.11
✎
15:35
|
(21) "А удалять ВТ смысла нет они живут пока выполняется пакет." - Это не так. Методисты 1С советуют ВСЕГДА удалять временные таблицы, т.к. они могут "оставаться в памяти".
|
33 |
||
23
ДенисЧ
19.08.11
✎
15:35
|
24 27 |
|||
24
Ёпрст
19.08.11
✎
15:37
|
25 |
|||
25
ДенисЧ
19.08.11
✎
15:38
|
(24)
|Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док |Где док.Ссылка.Проведен = &Ист | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, док.Количество Как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.РеализацияТоваровУслуг.Товары Док |Где док.Ссылка.Проведен = &Ист | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док |Где док.Ссылка.Проведен = &Ист |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, док.Количество Как КоличествоВозврат |Из Документ.ВозвратТоваровОтПокупателя.Товары Док |Где док.Ссылка.Проведен = &Ист |) Как ТабРез, ВремТаб |Где ТабРез.УникальныйНомерРазмера.Код = ВремТаб.НомерРазмера |Сгруппировать по УникальныйНомерРазмера |
26 32 36 |
||
26
Axel2009
19.08.11
✎
15:39
|
(25) индексы то по сериям есть???
|
29 |
||
27
mirosh
19.08.11
✎
15:39
|
(23) ну а вместо соединения, ты не написал, что
ГДЕ док.СерияНоменклатуры.Код В (Выбрать РАзличные ВремТаб.НомерРазмера из ВремТаб)? И так везде - обязательно |
28 32 |
||
28
mirosh
19.08.11
✎
15:39
|
+(27) то есть не вместо, а в условия запихнуть
|
|||
29
ДенисЧ
19.08.11
✎
15:40
|
(26) есть. В ТрН проиндексировал поля Серия, номенклатура, Продукция, СчетЗатрат.
|
30 33 |
||
30
Axel2009
19.08.11
✎
15:40
|
(29) тогда попробуй сначала ВТ сформировать по нужным сериям с индексом по полю. и соединять с таблицами. выборки то большие получаются??
|
34 |
||
31
Axel2009
19.08.11
✎
15:41
|
_Document565 - это какой документ?
|
34 |
||
32
ДенисЧ
19.08.11
✎
15:42
|
35 36 38 |
|||
33
Inform
19.08.11
✎
15:42
|
(29) Попробуй запрос из (12)
(22) Раньше скорее всего рекомендовали, когда использовался МенеджерВременныхТаблиц в явном виде. Вот тут М. Радченко объясняет как уничтожаются ВТ: http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=555964&threadtype=0 |
37 |
||
34
ДенисЧ
19.08.11
✎
15:42
|
||||
35
Axel2009
19.08.11
✎
15:43
|
(32) фигней не занимайся. в худшем случае он из время таб как ИЛИ все разфигачит. в лучшем случае будет равнозначно что есть сейчас.
|
|||
36
DrHiHi
19.08.11
✎
15:43
|
39 |
|||
37
ДенисЧ
19.08.11
✎
15:43
|
(33) ТО же самое вплоть до плана запроса в sql
|
42 |
||
38
mirosh
19.08.11
✎
15:43
|
(32) ну я имею в виду, что каждый запрос в объединить должен быть как ВТ. Внутрь каждой ВТ ставить условие, что СерияНоменклатуры.Код В (Выбрать ВремТаб.НомерРазмера из ВремТаб)
|
|||
39
Reaper_1c
19.08.11
✎
15:44
|
+(36) почему не используешь внутреннее соединение? Зачем тут декартово произведение?
|
40 41 45 |
||
40
DrHiHi
19.08.11
✎
15:44
|
(39)
я выше писал |
|||
41
Axel2009
19.08.11
✎
15:45
|
(39) какое декартово произведение?
|
43 |
||
42
Inform
19.08.11
✎
15:46
|
||||
43
Reaper_1c
19.08.11
✎
15:46
|
44 46 |
|||
44
Ёпрст
19.08.11
✎
15:47
|
(43) у него иннер джоин, если что
|
|||
45
DrHiHi
19.08.11
✎
15:47
|
(39) в некоторых случаях замечал, что в условии быстрее работает, чем при внутреннем соединении
|
48 |
||
46
Axel2009
19.08.11
✎
15:47
|
(43) планы запроса то смотрел, чтобы говорить про это произведение?
|
50 |
||
47
Ёпрст
19.08.11
✎
15:47
|
+44 дальше условие where идёт
|
|||
48
Axel2009
19.08.11
✎
15:48
|
(45) не верю =)
|
62 |
||
49
Ёпрст
19.08.11
✎
15:49
|
(0)
пробуй так.. во ВремТаб соедини с табличкой справочника и поимей в ВремТаб сразу ссылку на УникальныйНомерРазмера, затем в основном запросе втыкай условие уже на серию, а не на её код. |
52 |
||
50
Reaper_1c
19.08.11
✎
15:49
|
(46) Нет. Тащи, поглядим. Не верю я, что 1С транслирует такую конструкцию в нормальное соединение.
|
51 54 |
||
51
Axel2009
19.08.11
✎
15:50
|
(50) транслирует
|
|||
52
ДенисЧ
19.08.11
✎
15:51
|
(49) уже. Чуть побыстрее стало. Но всё равно ощутима задержка...
вот такой получился |Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать Различные Ссылка Как Серия |Поместить ВремСерии |Из Справочник.СерииНоменклатуры |Где Код В (Выбрать РАзличные ВремТаб.НомерРазмера из ВремТаб); | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док |Где док.Ссылка.Проведен = &Ист | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, док.Количество Как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.РеализацияТоваровУслуг.Товары Док |Где док.Ссылка.Проведен = &Ист | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док |Где док.Ссылка.Проведен = &Ист |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, док.Количество Как КоличествоВозврат |Из Документ.ВозвратТоваровОтПокупателя.Товары Док |Где док.Ссылка.Проведен = &Ист |) Как ТабРез, ВремСерии |ГДЕ ТабРез.УникальныйНомерРазмера = ВремСерии.Серия |Сгруппировать по УникальныйНомерРазмера |
|||
53
Aprobator
19.08.11
✎
15:51
|
(0) ВремТаб из за одной колонки? Массив и условие В не катит?
|
55 |
||
54
ДенисЧ
19.08.11
✎
15:51
|
(50) вот такой получается
SELECT T6._Fld14315RRef AS Fld14315RRef, CAST(@P1 AS NUMERIC(15, 3)), T6._Fld14303 AS Fld14303_, CAST(@P1 AS NUMERIC(15, 3)), CAST(@P1 AS NUMERIC(15, 3)) FROM _Document527_VT14297 T6 WITH(NOLOCK) INNER JOIN #tt1 T7 WITH(NOLOCK) ON 1=1 LEFT OUTER JOIN _Document527 T8 WITH(NOLOCK) ON T6._Document527_IDRRef = T8._IDRRef LEFT OUTER JOIN _Reference210 T9 WITH(NOLOCK) ON T6._Fld14315RRef = T9._IDRRef WHERE (T8._Posted = @P2) AND (T9._Code = T7._Q_000_F_000) То есть транслирует |
57 |
||
55
ДенисЧ
19.08.11
✎
15:52
|
(53) Может, и катит... Просто там одна колонка осталась в процесс рефакторинга :-) До этого было больше.
|
|||
56
Aprobator
19.08.11
✎
15:55
|
И кстати. Условие, по своей сути, функция возвращающая булево значение. Посему реквизиты типа булево не имеет смысла с чем либо сравнивать. Т.е. вместо: док.Ссылка.Проведен = &Ист достаточно док.Ссылка.Проведен.
|
58 |
||
57
Reaper_1c
19.08.11
✎
15:57
|
(54) *присвистнул* Мать честная, поумнела платформа! спасибо, буду знать.
Он кстати, подлец, условие на проведение документов вообще вовне вынес, что печально... |
60 |
||
58
ДенисЧ
19.08.11
✎
16:01
|
(56) Да, спасибо. Не подумал.
|
|||
59
Reaper_1c
19.08.11
✎
16:05
|
Ах ты ж етит твою налево, нифига она не поумнела. от этого
INNER JOIN #tt1 T7 WITH(NOLOCK) ON 1=1 легче никогда не станет. Переделай в 1Се на внтреннее соединение - ну должен он тогда честно все построить. |
|||
60
Axel2009
19.08.11
✎
16:06
|
(57) а при чем тут платформа? раньше запросы были через кроссджоины и условия в ГДЕ. скуль это умеет еще с версии 6.0
|
61 |
||
61
Reaper_1c
19.08.11
✎
16:08
|
(60) Да я ее и не виню - я с самого начала предлагал от декартова произведения избавиться.
|
63 |
||
62
DrHiHi
19.08.11
✎
16:12
|
(48) протестируй
ВЫБРАТЬ 1 КАК число ПОМЕСТИТЬ ВТЧисла ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТЧисла.число * 10000 + ВТЧисла1.число * 1000 + ВТЧисла2.число * 100 + ВТЧисла3.число * 10 + ВТЧисла4.число КАК Поле1 ПОМЕСТИТЬ ВТВрем ИЗ ВТЧисла КАК ВТЧисла, ВТЧисла КАК ВТЧисла1, ВТЧисла КАК ВТЧисла2, ВТЧисла КАК ВТЧисла3, ВТЧисла КАК ВТЧисла4 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТВрем.Поле1 ИЗ ВТВрем КАК ВТВрем ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВрем КАК ВТВрем1 ПО ВТВрем.Поле1 = ВТВрем1.Поле1 //ГДЕ // ВТВрем.Поле1 В // (ВЫБРАТЬ РАЗЛИЧНЫЕ // ВТВрем1.Поле1 // ИЗ // ВТВрем КАК ВТВрем1) |
|||
63
Axel2009
19.08.11
✎
16:14
|
(61) внезапно
select * from t t1 cross join t t2 (строк обработано: 1) StmtText ------------------------------------------ |--Nested Loops(Inner Join) |--Table Scan(OBJECT:(t AS [t2])) |--Table Scan(OBJECT:(t AS [t1])) (строк обработано: 3) StmtText ---------------------------------------- select * from t t1 join t t2 on 1=1 (строк обработано: 1) StmtText ------------------------------------------ |--Nested Loops(Inner Join) |--Table Scan(OBJECT:(t AS [t2])) |--Table Scan(OBJECT:(t AS [t1])) (строк обработано: 3) StmtText ------------------------------------------------------------ select * from t t1 join t t2 on 1=1 where t1.i = t2.i (строк обработано: 1) StmtText ---------------------------------------------------------------------------------------------------------- |--Hash Match(Inner Join, HASH:([t2].[i])=([t1].[i]), RESIDUAL:(t.[i] as [t2].[i]=t.[i] as [t1].[i])) |--Table Scan(OBJECT:(t AS [t2])) |--Table Scan(OBJECT:(t AS [t1])) (строк обработано: 3) |
|||
64
ДенисЧ
19.08.11
✎
16:19
|
Переделал на явные соединения - выигрыш по скорости - 0.15 сек из 2х...
|
65 66 71 |
||
65
Ёпрст
19.08.11
✎
16:23
|
68 |
|||
66
Inform
19.08.11
✎
16:24
|
(64) явные - внутренние?
|
67 |
||
67
ДенисЧ
19.08.11
✎
16:26
|
(66) Угу. Типа
|Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док |Внутреннее Соединение ВремСерии | по Док.СерияНоменклатуры = ВремСерии.Серия |Где док.Ссылка.Проведен |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция |
69 |
||
68
ДенисЧ
19.08.11
✎
16:26
|
(65) не... Я сам хочу пог*внокодить :-)
|
70 |
||
69
Inform
19.08.11
✎
16:27
|
(67) сделай:
ПО Док.СерияПродукции.Код = ВремСерии.НомерРазмера И (Док.Номенклатура = Док.Продукция) И (Док.СчетЗатрат = &СчетБрак) И (Док.Ссылка.Проведен) вместо: | по Док.СерияНоменклатуры = ВремСерии.Серия |Где док.Ссылка.Проведен |И док.СчетЗатрат = &СчетБрак |И док.Номенклатура = док.Продукция |
72 |
||
70
Aprobator
19.08.11
✎
16:28
|
(68) поддерживаю Свои шишки лучше запоминаются. А уж "добрых" людей, готовых чем нибудь в тебя кинуть за г*код, на мисте предостаточно.
|
|||
71
Reaper_1c
19.08.11
✎
16:28
|
(64) пробуй перед соединением обе таблицы сделать временными с индексами по полям соединения и только после этого соединять.
|
73 |
||
72
ДенисЧ
19.08.11
✎
16:40
|
(69) сделал...
SELECT T8._Fld16150RRef AS Fld16150RRef, CAST(@P1 AS NUMERIC(15, 3)), CAST(@P1 AS NUMERIC(15, 3)), T8._Fld16142 AS Fld16142_, CAST(@P1 AS NUMERIC(15, 3)) FROM _Document565_VT16136 T8 WITH(NOLOCK) INNER JOIN #tt2 T9 WITH(NOLOCK) ON (T8._Fld16150RRef = T9._Q_001_F_000RRef) LEFT OUTER JOIN _Document565 T10 WITH(NOLOCK) ON T8._Document565_IDRRef = T10._IDRRef WHERE T10._Posted = @P2 AND (T8._Fld16160RRef = @P3) AND (T8._Fld16145RRef = T8._Fld16149RRef) |
74 |
||
73
ДенисЧ
19.08.11
✎
16:42
|
(71) там основное время занимает предикат
[upp1].[dbo].[_Document565_VT16136].[_Fld16160RRef] as [T8].[_Fld16160RRef]=[@P3] AND [upp1].[dbo].[_Document565_VT16136].[_Fld16145RRef] as [T8].[_Fld16145RRef]=[upp1].[dbo].[_Document565_VT16136].[_Fld16149RRef] as [T8].[_Fld16149RRef] Так что индексы во временных таблицах не помогут ничем. |
79 |
||
74
Axel2009
19.08.11
✎
16:42
|
(72) мои советы пробовал или игнорировал?
|
75 |
||
75
ДенисЧ
19.08.11
✎
16:44
|
(74) пробовал.
|
77 |
||
76
Aprobator
19.08.11
✎
16:46
|
так какой вариант самый шустрый оказался?
|
78 |
||
77
Axel2009
19.08.11
✎
16:46
|
(75) а планы выполнения кинь в файл и прицепи куданить
и кинь структуру таблицы _Document565_VT16136 из структурыхраненияинформационнойбазы чтобы было понятно что какое поле значит |
79 |
||
78
ДенисЧ
19.08.11
✎
16:48
|
(76) такой
|Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать Различные Ссылка Как Серия |Поместить ВремСерии |Из Справочник.СерииНоменклатуры |Где Код В (Выбрать РАзличные ВремТаб.НомерРазмера из ВремТаб); | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док, ВремСерии |Где док.Ссылка.Проведен |И док.СерияПродукции = ВремСерии.Серия | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, док.Количество Как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.РеализацияТоваровУслуг.Товары Док, ВремСерии |Где док.Ссылка.Проведен |И док.СерияНоменклатуры = ВремСерии.Серия | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ТребованиеНакладная.Материалы Док |Внутреннее Соединение ВремСерии | по (Док.СерияНоменклатуры = ВремСерии.Серия) | И док.Ссылка.Проведен | И (док.СчетЗатрат = &СчетБрак) | И (док.Номенклатура = док.Продукция) | |Объединить Все | |Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, док.Количество Как КоличествоВозврат |Из Документ.ВозвратТоваровОтПокупателя.Товары Док, ВремСерии |Где док.Ссылка.Проведен |И док.СерияНоменклатуры = ВремСерии.Серия |) Как ТабРез |Сгруппировать по УникальныйНомерРазмера |
143 |
||
79
ДенисЧ
19.08.11
✎
16:49
|
||||
80
Axel2009
19.08.11
✎
16:50
|
(док.Номенклатура = док.Продукция) сколько совпадений?
|
83 |
||
81
ДенисЧ
19.08.11
✎
16:50
|
А план... 145КБ xml - оно тебе нужно? :-)
|
84 |
||
82
Axel2009
19.08.11
✎
16:50
|
[upp1].[dbo].[_Document565_VT16136].[_Fld16160RRef] as [T8].[_Fld16160RRef]=[@P3] AND [upp1].[dbo].[_Document565_VT16136].[_Fld16145RRef] as [T8].[_Fld16145RRef]=[upp1].[dbo].[_Document565_VT16136].[_Fld16149RRef] as [T8].[_Fld16149RRef]
это как отображается в плане? и оно идет раньше чем соединение с сериями или позже? |
86 |
||
83
ДенисЧ
19.08.11
✎
16:51
|
(80) ~25-30% от всей массы
|
|||
84
Axel2009
19.08.11
✎
16:51
|
(81) план в тексте вывести. там не xml получится
|
87 |
||
85
Axel2009
19.08.11
✎
16:51
|
индекс по продукции и номенклатуре есть?
|
88 |
||
86
ДенисЧ
19.08.11
✎
16:52
|
||||
87
ДенисЧ
19.08.11
✎
16:52
|
(84) мне предлагает только .sqlplan, а это xml...
|
|||
88
ДенисЧ
19.08.11
✎
16:53
|
(85) Я уже писал выше. Есть.
|
89 |
||
89
Axel2009
19.08.11
✎
16:57
|
(88)
Выбрать ДокНом.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, ДокНом.Количество Как КоличествоБрак, 0 Как КоличествоВозврат Из Документ.ТребованиеНакладная.Материалы КАК ДокНом ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТребованиеНакладная.Материалы КАК ДокПрод ПО ДокНом.Ссылка = ДокПрод.Ссылка И ДокНом.Номенклатура = ДокПрод.Продукция ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремСерии ПО ДокНом.СерияНоменклатуры = ВремСерии.Серия ГДЕ ДокНом.Ссылка.Проведен И (ДокНом.СчетЗатрат = &СчетБрак) ? |
|||
90
ДенисЧ
19.08.11
✎
16:57
|
ойблин... Сейчас попробую...
|
|||
91
Axel2009
19.08.11
✎
16:57
|
мм еще по НомерСтроки соединить наверное лучше
|
|||
92
ДенисЧ
19.08.11
✎
17:01
|
не... Хуже стало
|
|||
93
Axel2009
19.08.11
✎
17:04
|
а данных по ТРН выдается сколько? строк. и сколько в принципе там строк?
|
95 |
||
94
ДенисЧ
19.08.11
✎
17:04
|
Основной затык по-прежнему на Номенклатура=Продукция...
Наверное, надо принцип получения данных менять... |
|||
95
ДенисЧ
19.08.11
✎
17:05
|
(93) Всего Трнов в базе порядочно. А в результате запроса и фильтрации остаётся не больше 3-4...
|
|||
96
Axel2009
19.08.11
✎
17:06
|
3-4 строки??
|
99 |
||
97
Axel2009
19.08.11
✎
17:06
|
Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, док.Количество Как КоличествоБрак, 0 Как КоличествоВозврат
Из Документ.ТребованиеНакладная.Материалы Док Внутреннее Соединение ВремСерии по (Док.СерияНоменклатуры = ВремСерии.Серия) И док.Ссылка.Проведен И (док.СчетЗатрат = &СчетБрак) сколько выполняется? |
99 |
||
98
Stim213
19.08.11
✎
17:07
|
фига вы тут нафлудили..
|
|||
99
ДенисЧ
19.08.11
✎
17:12
|
102 |
|||
100
Stim213
19.08.11
✎
17:13
|
сотке
|
|||
101
ДенисЧ
19.08.11
✎
17:13
|
Правда, там идеологически неверно, запросы в циклах и тд :-))
А нужные номера серий получаются из другой базы... Наверное, буду на следующей неделе переделывать полностью, ибо текущий вариант - это калька с 77шного, писанного до меня... |
|||
102
Axel2009
19.08.11
✎
17:18
|
(99) а скока строк выводится при этом?
|
103 |
||
103
ДенисЧ
19.08.11
✎
17:19
|
(102) по всему запросу (до сворачивания) - от 1 до 50и
|
104 |
||
104
Axel2009
19.08.11
✎
17:19
|
(103) то что в 97
|
105 |
||
105
ДенисЧ
19.08.11
✎
17:20
|
(104) на тех данных, что я сейчас кручу - от 0 до 3. На один номер продукции так много брака пока нет :-)
|
106 |
||
106
Axel2009
19.08.11
✎
17:22
|
(105) вот. а по колонке СчетЗатрат есть индекс??
|
107 |
||
107
ДенисЧ
19.08.11
✎
17:23
|
(106) И опять же говорил :-) Есть
|
|||
108
ДенисЧ
19.08.11
✎
17:23
|
А скуль всё равно по кластерному индексу бегает...
|
|||
109
Ёпрст
19.08.11
✎
17:35
|
вот такой сколько выполняется ?
Выбрать * |Поместить ВремТаб |из &тч Как ТЧ; | |Выбрать Различные Ссылка Как Серия |Поместить ВремСерии |Из Справочник.СерииНоменклатуры |Где Код В (Выбрать ВремТаб.НомерРазмера из ВремТаб); | |Выбрать УникальныйНомерРазмера, | Сумма(КоличествоВыпущено) Как КоличествоВыпущено, | Сумма(КоличествоПродано) Как КоличествоПродано, | Сумма(КоличествоБрак) Как КоличествоБрак, | Сумма(КоличествоВозврат) Как КоличествоВозврат |из ( |Выбрать | док.СерияПродукции Как УникальныйНомерРазмера, док.Количество Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоБрак, 0 Как КоличествоВозврат |Из Документ.ОтчетПроизводстваЗаСмену.Продукция Док |Где док.Ссылка.Проведен | |Объединить Все | |Выбрать док.СерияНоменклатуры,0,док.Количество,0,0 |Из Документ.РеализацияТоваровУслуг.Товары Док |Где док.Ссылка.Проведен |И док.СерияНоменклатуры = ВремСерии.Серия | |Объединить Все | |Выбрать док.СерияНоменклатуры,0,0,док.Количество,0 |Из Документ.ТребованиеНакладная.Материалы Док |Где | И док.Ссылка.Проведен | И (док.СчетЗатрат = &СчетБрак) | И (док.Номенклатура = док.Продукция) | |Объединить Все | |Выбрать док.СерияНоменклатуры,0,0,0,док.Количество |Из Документ.ВозвратТоваровОтПокупателя.Товары Док |Где док.Ссылка.Проведен |) Как ТабРез |Внутреннее Соединение ВремСерии | по ТабРез.УникальныйНомерРазмера = ВремСерии.Серия |Сгруппировать по ТабРез.УникальныйНомерРазмера |
112 |
||
110
artbear
19.08.11
✎
17:38
|
(0) А если по одной таблице документов оставить и посмотреть, какой док самый тормозной? ну или в плане изучить?
Какой? |
111 134 |
||
111
Ёпрст
19.08.11
✎
17:39
|
(110) у него Документ.ТребованиеНакладная.Материалы , там где
условие на док.Номенклатура = док.Продукция |
|||
112
artbear
19.08.11
✎
17:41
|
(109) ИМХО вместо док.Ссылка.Проведен нужно явно прописать соединение
да и по Булевскому значению индекс никакой, поэтому тупой поиск :( т.е. это условие вообще юзать только в конце нужно :( сначала что-то более подробное. |
115 |
||
113
artbear
19.08.11
✎
17:47
|
(All) Небольшой ОФФ.
Периодически я задаюсь вопросом: почему 1С не выполнила денормализацию основной таблицы документа и табличных частей в плане Проведен и Даты. Ведь практически любые запросы по ТЧ документов юзают эти два реквизиты, т.е. постоянные соединения. Дата еще сойдет, по ней индекс нормально может строиться, но вот Проведен только через поиск работает :( Понятно, что сложность работы напрямую с таблицами возрастает, типа нужно помнить, что при обновлении основной таблицы и таб.части нужно обновлять. Но и это можно было загнать в доку и всех обязать юзать. Или я сильно не прав? :( |
|||
114
DrHiHi
19.08.11
✎
17:49
|
это на всех так пятница влияет или луна??
|
|||
115
ДенисЧ
19.08.11
✎
21:16
|
(112) "сначала что-то более подробное"
Что именно? |
116 |
||
116
artbear
20.08.11
✎
09:41
|
(115) Я говорил о реквизитах, значений которых больше, и по которым скуль будет юзать индекс, а не тупой поиск.
Например, отбор по товару и т.п. а уже после этого можно заюзать Проведен |
127 |
||
117
artbear
20.08.11
✎
09:54
|
Т.е., например, сделать так
[code] Выбрать * ИЗ (Выбрать док.Ссылка, док.СерияНоменклатуры,0,0,док.Количество,0 |Из Документ.ТребованиеНакладная.Материалы Док |Где | (док.СчетЗатрат = &СчетБрак) | И (док.Номенклатура = док.Продукция) ) КАК Таблица ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТребованиеНакладная КАК Док По Таблица.Ссылка = Док.Ссылка ГДЕ док.Проведен [/code] Возможно, что и счет затрат можно выкинуть во внешний запрос |
124 |
||
118
artbear
20.08.11
✎
09:56
|
ОФФ забыл, как оформлять код :(
В правилах НИФИГА нету, помню, что Asmody показывал на форуме, что и как, но ветку не найду :( Тест <code>Тестовый код 1</code> |
|||
124
artbear
20.08.11
✎
10:04
|
(117) +
Т.е., например, сделать так
|
125 |
||
125
artbear
20.08.11
✎
10:07
|
(124) 1. Можно и Счет затрат перенести во внешний запрос
2. А можно и внутреннее соединение сделать по условию
В общем, нужно проверять быстродействие. ИМХО Один из этих способов точно быстрее твоего :) |
|||
126
ДенисЧ
20.08.11
✎
10:10
|
Так.сЪ.
Продираясь сквозь попытки. У меня соединяются несколько документов.Счёт затрат есть только в одном. Так что выносить не получиться |
128 |
||
127
ДенисЧ
20.08.11
✎
10:11
|
(116) Всех данных у меня на момент запроса - только номер серии. Можно выдирать номенклатуру по ней, но уже сделал выдирание серии. Сомневаюсь, что можно ещё повысисть скорость.
|
132 |
||
128
artbear
20.08.11
✎
10:12
|
(126) 1. Я разложил один твой запрос из вложенного, добавив еще один уровень вложенности.
2. Если (док.Номенклатура = док.Продукция) часто выполняется, то выносить нужно его, а не счетБрака |
131 |
||
129
artbear
20.08.11
✎
10:14
|
По серии все правильно, но можно еще попробовать ускориться.
Если Документ.ТребованиеНакладная.Материалы самая большая таблица, изучи условия по ней. Например, сделай группировки по Ссылка.Проведен, СчетЗатрат и Док.Номенклатура = Док.Продукция и посчитай количество элементов по их различным значениям. Там, где больше всего разных вариантов или меньше элементов, и можно делать внутреннее условие, а потом уже остальные во внешнем |
130 133 171 |
||
130
artbear
20.08.11
✎
10:17
|
(129) +
Ну т.е упрощенно
и по остальным условия сделать аналогичные запросы |
171 |
||
131
ДенисЧ
20.08.11
✎
10:18
|
(128) если ты не заметил, то номенклатура=продукция проверяется только для одного вида документов. И выносить это во внешнее условие - ни никакого смысла нет.
|
|||
132
artbear
20.08.11
✎
10:18
|
(127) Жду ответа на поставленные вопросы :)
|
|||
133
ДенисЧ
20.08.11
✎
10:19
|
138 |
|||
134
artbear
20.08.11
✎
10:19
|
Ты пропустил историю маленько :)
110 Я (0) А если по одной таблице документов оставить и посмотреть, какой док самый тормозной? ну или в плане изучить? Какой? 111 Ёпрст3 111 - 19.08.11 - 17:39 (110) у него Документ.ТребованиеНакладная.Материалы , там где условие на док.Номенклатура = док.Продукция === Вот я и начал изучать работу по этой таблице :) отсюда и рекомендации |
135 138 |
||
135
ДенисЧ
20.08.11
✎
10:20
|
(134) дык отсюда и пляшу. Причём смотрю планы запроса по sql. Это всё выше есть.
|
|||
136
Jofa
20.08.11
✎
10:23
|
Откуда у тебя тч берётся??
|
137 |
||
137
ДенисЧ
20.08.11
✎
10:24
|
||||
138
artbear
20.08.11
✎
10:25
|
(133) (134) 1Это я видел
2. смотри, у тебя во вложенном запросе есть код Объединить Все
Попробуй заменить его на следующий Объединить Все
|
139 |
||
139
ДенисЧ
20.08.11
✎
10:25
|
(138) А где я тебе счет затрат возьму в ОПзС? И зачем он там?
|
142 |
||
140
ДенисЧ
20.08.11
✎
10:26
|
Стоп, понял. Нет. Это будет ещё хуже.
|
142 |
||
141
ДенисЧ
20.08.11
✎
10:26
|
Хотя бы потому, что я ссылку на документ наружу не тащу, не нужен он там, на руже.
|
142 |
||
142
artbear
20.08.11
✎
10:28
|
143 |
|||
143
ДенисЧ
20.08.11
✎
10:31
|
144 |
|||
144
artbear
20.08.11
✎
10:36
|
(143) Значит, самый тормоз здесь? ты же таблицы по отдельности тестил?
Интересно, как 1С транслирует запрос с Внутренним соединением по одной таблице и неявным левым соединением по другой? |
145 158 |
||
145
ДенисЧ
20.08.11
✎
10:38
|
(144) ага, здесь. Выше приведены тормозные предикаты из плана запроса.
Если исключаю ТрН, то всё летает. Хотя полторы секунды на заполнение таблицы - не то время, чтобы рвать *опу, но хочется сделать красиво. |
|||
146
Jofa
20.08.11
✎
10:40
|
Может стоит сперва документы выбрать поместить их в ВТ а уже потом делать внутринее соеденение.
|
147 |
||
147
ДенисЧ
20.08.11
✎
10:42
|
(146) какие все? По сериям? Или как?
|
|||
148
Jofa
20.08.11
✎
10:45
|
Выбрать
док.СерияНоменклатуры Как УникальныйНомерРазмера, док.Количество Как КоличествоБрак, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоВозврат ПОместитю ВТ_Док1 Из Документ.ТребованиеНакладная.Материалы Док ГДЕ И док.Ссылка.Проведен И док.СчетЗатрат = &СчетБрак И док.Номенклатура = док.Продукция |
150 |
||
149
artbear
20.08.11
✎
10:45
|
Тогда сначала выбери материалы из ТРН по сериям (внутреннее соединение) (там много совпадений?) во внутреннем запросе, а во внешнем уже проверяй условия по продукции, счету и проведению
|
151 155 |
||
150
artbear
20.08.11
✎
10:46
|
(148) Не прав, автор уже писал, что как раз это запрос и есть самый тормоз :(
|
|||
151
ДенисЧ
20.08.11
✎
10:47
|
||||
152
ДенисЧ
20.08.11
✎
10:47
|
Спасибо за советы :-)
|
|||
153
Jofa
20.08.11
✎
10:47
|
Хотя Серии можно выгрузить в массив и подставлять в документы как условие :
Выбрать док.СерияНоменклатуры Как УникальныйНомерРазмера, док.Количество Как КоличествоБрак, 0 Как КоличествоВыпущено, 0 как КоличествоПродано, 0 Как КоличествоВозврат ПОместитю ВТ_Док1 Из Документ.ТребованиеНакладная.Материалы Док ГДЕ И док.Ссылка.Проведен И док.СчетЗатрат = &СчетБрак И док.Номенклатура = док.Продукция И Док.СерияНоменклатуры В (&Серии) |
|||
154
Asirius
20.08.11
✎
10:47
|
(0) замени условие
где док.СерияНоменклатуры.Код = ВремТаб.НомерРазмера на что-то типа где док.СерияНоменклатуры в СписокСерий |
156 |
||
155
ДенисЧ
20.08.11
✎
10:48
|
(149) Про совпадения. Как я уже писал :-), совпадений не много. Не так уж и много брака у нас.
Уже думаю, может, доп признак-реквизит вводить... |
159 |
||
156
ДенисЧ
20.08.11
✎
10:49
|
(154) "всю ветку не читал, но скажу мнение"?
Уже сделано. |
158 |
||
157
Jofa
20.08.11
✎
10:50
|
Ну как работает??
|
|||
158
artbear
20.08.11
✎
10:50
|
||||
159
artbear
20.08.11
✎
10:51
|
(155) ты же писал, что СчетБрака 75% ? или как раз 25 это брак, все остальное нет?
|
161 |
||
160
ДенисЧ
20.08.11
✎
10:51
|
Все проверки в понедельник.
Из дома мне не хочется лезть в это *овно... Да и некомфортно это делать по удалёнке... Продолжим дискуссию через 46 часов... |
|||
161
ДенисЧ
20.08.11
✎
10:52
|
(159) 75% - брак не готовой продукции, то есть Номенклатура != продукция.
|
163 |
||
162
ДенисЧ
20.08.11
✎
10:53
|
хотя... Блин, вспомнил, там же меняться будет всё...
Ой, геморрой на мою голову... Вообще все условия менять придётся для брака :-((( |
|||
163
artbear
20.08.11
✎
10:54
|
(161) А я спрашивал про группировки немного другое -
сколько процентов об общего числа записей в ТРН.Материалы занимается вариант группировку по Счету = СчетБрака? |
165 |
||
164
artbear
20.08.11
✎
10:55
|
Если брака мало, значит, самый внутренний запрос делаем по нему, а во внешнем проверяем все остальные условия
|
166 167 |
||
165
ДенисЧ
20.08.11
✎
10:55
|
(163) процентов 10, если мне склероз не изменяет. Может, чуть меньше. Надо запросы писать и ОТК спрашивать.
|
169 |
||
166
artbear
20.08.11
✎
10:56
|
(164) + если брака много, пишем служебку и кого-нибудь наказываем :)
|
168 |
||
167
ДенисЧ
20.08.11
✎
10:56
|
(164) хм.... А это вариант... Надо будет проверить, как до базы доберусь...
|
171 |
||
168
ДенисЧ
20.08.11
✎
10:56
|
(166) это и без меня делается :-)
Работяги уже стонут и так от наказаний... |
|||
169
artbear
20.08.11
✎
10:56
|
(165) а индекс по счету есть в таблице?
|
170 |
||
170
ДенисЧ
20.08.11
✎
10:58
|
(169) И опять же :-))))
Есть по всем полям, которые участвуют в запросе |
|||
171
artbear
20.08.11
✎
10:59
|
172 |
|||
172
ДенисЧ
20.08.11
✎
11:00
|
175 |
|||
173
artbear
20.08.11
✎
11:01
|
Наверное, лучше такие запросы сделать
|
174 |
||
174
ДенисЧ
20.08.11
✎
11:02
|
(173) зачем? Я представляю себе общуюю статистику по базе...
|
176 |
||
175
artbear
20.08.11
✎
11:04
|
(172) вот отсюда и делаем выбор.
п.1 (проведен) сразу откидываем во внешний запрос, он совсем тормоз и будет тупой поиск п.2 (счет затрат) очень интересен, всего 25% и простейшее условие - поле = константе, идеал для скуля п.3 (товар = продукция) - совпадений мало, но здесь нужно уже смотреть, как скуль выполнит это условие. Итог во внутренний запрос кидаем п.2 или 3, а во внешнем проверяем все остальное. я склоняюсь все-таки к проверке счета. |
177 178 |
||
176
artbear
20.08.11
✎
11:04
|
(174) Представление часто расходится с точным значением,
лучше проверь лишний раз :) тем более, это несложно и очень быстро |
177 |
||
177
ДенисЧ
20.08.11
✎
11:07
|
||||
178
artbear
20.08.11
✎
11:08
|
(175) (на всякий случай уточню) + т.е. я больше склоняюсь к варианту
во вложенном запросе идет внутреннее соединение по сериям и проверка на счет затра, а во вложенном - проведен и товар = номенклатура и это результат объединяем через Объединить все |
179 |
||
179
ДенисЧ
20.08.11
✎
11:09
|
(178) угу. Логично. У меня мозги замылились и не видят, казалось бы, очевидных вариантов. Спасибо за советы. Проверим.
|
181 |
||
180
artbear
20.08.11
✎
11:10
|
Еще напомню: напиши, плиз, как 1С транслирует в скуль твой текущий вариант
|
182 |
||
181
artbear
20.08.11
✎
11:12
|
(179) Кстати, чем смотришь запрос скуля и планы? консолью с трассировкой (есть на ИС) или еще как?
|
184 |
||
182
ДенисЧ
20.08.11
✎
11:12
|
(180) Это я смотрел, ничего интересного. 3 юниона.
|
183 |
||
183
artbear
20.08.11
✎
11:14
|
(182) а подробнее? какие юнионы? по каким условиям? что с чем?
|
184 |
||
184
ДенисЧ
20.08.11
✎
11:16
|
185 |
|||
185
artbear
20.08.11
✎
11:17
|
(184) ИМХО Это долго и уже устарело :(
лучше на ИС возьми консоль с трассировкой (в поиск с таким названием), все будет просто и удобно. Рекомендую. |
186 188 |
||
186
Jofa
20.08.11
✎
11:19
|
(185) ЧТо можно там позыреть в общем
|
|||
187
Jofa
20.08.11
✎
11:19
|
+ ИС = ИТС??
|
|||
188
ДенисЧ
20.08.11
✎
11:20
|
(185) эта ? http://infostart.ru/public/85192/
|
192 |
||
189
artbear
20.08.11
✎
11:20
|
Как раз планы и можно посмотреть! очень удобно :)
+ код, генерируемый 1С. фактически то же самое, что вручную смотрим в профайлере. если юзать в рабочей базе, то будут видны все запросы других пользователей. |
191 |
||
190
ДенисЧ
20.08.11
✎
11:21
|
или эта: http://infostart.ru/public/81694/ ?
|
|||
191
Jofa
20.08.11
✎
11:22
|
(189) Крута .. Нада по юзать
|
|||
192
artbear
20.08.11
✎
11:22
|
(188) нет, другая - http://infostart.ru/public/56973/
вот еще интересная статья по индексам, где приводится пример ее использования - http://infostart.ru/public/81694/ |
193 |
||
193
ДенисЧ
20.08.11
✎
11:23
|
(192) хм... Обязательно проверю...
|
|||
194
Jofa
20.08.11
✎
11:27
|
Она могет просматривать ВТ ??
|
|||
195
Axel2009
20.08.11
✎
11:58
|
(0) в общем у меня тока один вариант. заходишь в скуль и рисуешь составной индекс на поля счетзатрат, серия..
скока выполняется запрос Выбрать КОЛИЧЕСТВО(*) Из Документ.ТребованиеНакладная.Материалы Док Внутреннее Соединение ВремСерии по (Док.СерияНоменклатуры = ВремСерии.Серия) И док.Ссылка.Проведен ? и Выбрать КОЛИЧЕСТВО(*) Из Документ.ТребованиеНакладная.Материалы Док ГДЕ док.Ссылка.Проведен И (док.СчетЗатрат = &СчетБрак) |
196 |
||
196
ДенисЧ
20.08.11
✎
12:00
|
(195) допиндексы составлять -пока не вариант. 8ка идёт на стадии разработки и внедрения.
А так - я бы даже не парился... Проверить на скорость запрос - только в понедельник. |
|||
197
ILM
гуру
20.08.11
✎
19:34
|
Думал, сами найдете самое быстрое решение, но вижу скоро пойдете на третью сотню...
Пока даю подсказку: СУММА() - это агрегатная функция!!! |
198 |
||
198
ДенисЧ
20.08.11
✎
19:36
|
(197) гениально!!
|
|||
199
ILM
гуру
20.08.11
✎
19:42
|
Ага - засунь его во внутрь его!!!
Записей будет намно-о-о-го меньше))) |
|||
200
ILM
гуру
20.08.11
✎
19:48
|
ВЫБРАТЬ ТЧ;
ВЫБРАТЬ СЕРИЯ, СУММА(), СУММА(), СУММА() ИЗ (ВЫБРАТЬ СЕРИЯ, СУММА(), 0, 0 ИЗ ... СГРУППИРОВАТЬ ПО СЕРИЯ ОБЪЕДЕНИТЬ ВСЕ ВЫБРАТЬ СЕРИЯ, 0, СУММА(), 0 ИЗ ... СГРУППИРОВАТЬ ПО СЕРИЯ ОБЪЕДЕНИТЬ ВСЕ ВЫБРАТЬ СЕРИЯ, 0, 0, СУММА() ИЗ ... СГРУППИРОВАТЬ ПО СЕРИЯ КАК ) СГРУППИРОВАТЬ ПО СЕРИЯ Гаранитирую прирост 300% |
201 205 |
||
201
ДенисЧ
20.08.11
✎
19:50
|
(200) ты тоже не читал всю тему целиком?
|
202 |
||
202
ILM
гуру
20.08.11
✎
19:54
|
(201) По диагонали прокрутил, если на что-то не обратил внимание, то ткни пальцем в нужное сообщение.
Счас посомотрел повнимательнее... То что по ADO из оракла тянешь? Так и тяни сразу суммы... Или что-то другое? |
|||
203
ДенисЧ
20.08.11
✎
19:57
|
(2020 из оракла тянутся номера серий. Всё остальное - из 1с. И самые тормоза там, где описано выше.
Мне надавали советов, в понедельник испытаю |
|||
204
ILM
гуру
20.08.11
✎
20:15
|
Good Luck))
|
|||
205
Ёпрст
22.08.11
✎
08:23
|
(200) group by одна из самых тормозных операций, если че..
|
206 |
||
206
artbear
22.08.11
✎
10:47
|
||||
207
artbear
23.08.11
✎
16:20
|
(0) Автор, ау!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |