Имя: Пароль:
1C
1С v8
Оптимизация запроса 1С
0 bfss-732
 
06.03.21
14:25
Привет!
Как можно оптимизировать?
ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаТоваров.Ссылка КАК СчетФактура,
| ТаблицаТоваров.СтранаПроисхождения.Код КАК СтранаПроисхождения,
| ТаблицаТоваров.НомерГТД,
| СУММА(1) КАК КоличествоЭлементов
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Ссылка В(&СписокСФ)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.СтранаПроисхождения,
| ТаблицаТоваров.НомерГТД,
| ТаблицаТоваров.СтранаПроисхождения.Код
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.СтранаПроисхождения.Код,
| ТаблицаТоваров.НомерГТД,
| СУММА(1)
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Оборудование КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Ссылка В(&СписокСФ)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.СтранаПроисхождения,
| ТаблицаТоваров.НомерГТД,
| ТаблицаТоваров.СтранаПроисхождения.Код
1 nicxxx
 
06.03.21
14:31
Нечего тут оптимизировать.
Надо группировку оставить одну и применить ее к юниону. А то дубли строк могут появиться.
2 timurhv
 
06.03.21
14:35
(0) больше 128 элементов в СписокСФ?
3 vde69
 
06.03.21
14:43
переделать на запрос к регистру

зы
запросы к документам как правило это плохо
4 bfss-732
 
06.03.21
14:45
(1) это как? Что за юнион?
5 DAFA
 
06.03.21
14:49
ИНДЕКСИРОВАТЬ ПО
6 nicxxx
 
06.03.21
14:55
(5) что там индексировать ты собрался? чтобы замедлить запрос если только?
7 timurhv
 
06.03.21
14:55
(5) так по полю Ссылка табличной части изначально должен быть кластерный индекс, зачем его дополнительно индексировать?
8 RomanYS
 
06.03.21
14:56
(4) Сначала объединить без группировки и ".Код"( это неявное соединение) во временную таблицу, а потом уже группировать и .Код из временной
9 DAFA
 
06.03.21
15:04
(6) для чего поля индексируют? ты вообще оптимизацией занимался ? ранее
10 DAFA
 
06.03.21
15:05
(7) про ссылку речи не было
11 ДенисЧ
 
06.03.21
15:07
(9) Вот ты и ответь. Зачем в этом запросе индексация.
12 DAFA
 
06.03.21
15:07
тут не такой уж замороченный запрос . чтоб его оптимизировать
13 DAFA
 
06.03.21
15:07
(11) лучше ты ответь как ты профа за час сдал и спеца по платформе без подготовки ?
14 bfss-732
 
06.03.21
15:09
(8) ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТаблицаТоваров.Ссылка КАК СчетФактура,
    1 КАК КоличествоЭлементов,
    ТаблицаТоваров.Номенклатура.Код,
    ТаблицаТоваров.Коэффициент КАК Коэффициент,
    ТаблицаТоваров.Номенклатура
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ТаблицаТоваров
ГДЕ
    ТаблицаТоваров.Ссылка = &СписокСФ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ТаблицаТоваров.Ссылка,
    1,
    NULL,
    ТаблицаТоваров.Коэффициент,
    ТаблицаТоваров.Номенклатура
ИЗ
    Документ.ПоступлениеТоваровУслуг.Оборудование КАК ТаблицаТоваров
ГДЕ
    ТаблицаТоваров.Ссылка = &СписокСФ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.СчетФактура,
    ВТ.КоличествоЭлементов,
    ВТ.НоменклатураКод,
    ВТ.Коэффициент,
    ВТ.Номенклатура.Код КАК НоменклатураКод1
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура,
    ВТ.СчетФактура,
    ВТ.КоличествоЭлементов,
    ВТ.НоменклатураКод,
    ВТ.Коэффициент
15 DAFA
 
06.03.21
15:09
(11) я этот запрос на примере не использовал . но обычно индексация дает большой прирост  еще 10 лет на курсах нам это разжевывали
16 DAFA
 
06.03.21
15:11
17 ДенисЧ
 
06.03.21
15:13
(13) Хватит бредить. Я понимаю, весна. Но то, что врач прописал, принимать надо всё-таки.
18 ДенисЧ
 
06.03.21
15:13
(15) Выкинь эти курсы и никогда больше о них не вспоминай.
19 DAFA
 
06.03.21
15:13
ты на вопрос не ответил )
20 DAFA
 
06.03.21
15:14
(18) все курсы фуфло
21 DAFA
 
06.03.21
15:14
(17) я к врачам лет 30 не ходил тьфу тьфу
22 DAFA
 
06.03.21
15:16
23 RomanYS
 
06.03.21
15:21
(14) Это ты так (0) переписал :)?
Идея такая, только Номенклатура.Код из первого запроса убрать. И "1 КАК КоличествоЭлементов" во второй запрос перенести, хотя на скорость наверное не влияет
24 bfss-732
 
06.03.21
15:39
(23) Да, как ты и писал.
Покажи что не так
25 bfss-732
 
06.03.21
15:51
(23)
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТаблицаТоваров.Ссылка КАК СчетФактура,
    ТаблицаТоваров.Коэффициент КАК Коэффициент,
    ТаблицаТоваров.Номенклатура
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ТаблицаТоваров
ГДЕ
    ТаблицаТоваров.Ссылка = &СписокСФ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ТаблицаТоваров.Ссылка,
    ТаблицаТоваров.Коэффициент,
    ТаблицаТоваров.Номенклатура
ИЗ
    Документ.ПоступлениеТоваровУслуг.Оборудование КАК ТаблицаТоваров
ГДЕ
    ТаблицаТоваров.Ссылка = &СписокСФ

ИНДЕКСИРОВАТЬ ПО
    ТаблицаТоваров.Номенклатура,
    Коэффициент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.СчетФактура,
    ВТ.Коэффициент,
    ВТ.Номенклатура.Код КАК НоменклатураКод1,
    1 КАК Поле1
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура,
    ВТ.СчетФактура,
    ВТ.Коэффициент,
    ВТ.Номенклатура.Код
26 RomanYS
 
06.03.21
15:52
(24) что не так...
В (0) совершенно другие данные выбирались (ГТД, страна...)

(25) да. Только Сумма(1) потерял
27 bfss-732
 
06.03.21
15:55
(26)
Да, данные поменял, извиняюсь
28 bfss-732
 
06.03.21
15:58
(26) Спасибо! Сумма(1) добавил
29 xXeNoNx
 
06.03.21
16:06
(25) что-то сильно сомневаюсь что данный запрос быстрее будет
30 ДенисЧ
 
06.03.21
16:07
(22) Так это к 77. Там только ты за час не сможешь подготовиться
31 xXeNoNx
 
06.03.21
16:08
ТаблицаТоваров.Ссылка = &СписокСФ - так там список или ссылка?
ВТ.Номенклатура.Код - попахивает соединением
ПОМЕСТИТЬ ВТ - сброс в tempdb, а оно надо?
32 xXeNoNx
 
06.03.21
16:12
(15) а в данном контексте(0) за счет чего при индексации будет прирост? Или ответ "обычно дает прирост" - это всегда прокатывает?
33 bfss-732
 
06.03.21
16:13
(31) ТаблицаТоваров.Ссылка В &СписокСФ
Так должно быть
34 xXeNoNx
 
06.03.21
16:14
(33) В (25) это не так
35 bfss-732
 
06.03.21
16:18
(34) а как?
36 xXeNoNx
 
06.03.21
16:20
(35) у тебя в (25) написан вот так:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТаблицаТоваров.Ссылка КАК СчетФактура,
    ТаблицаТоваров.Коэффициент КАК Коэффициент,
    ТаблицаТоваров.Номенклатура
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ТаблицаТоваров
ГДЕ
    ТаблицаТоваров.Ссылка = &СписокСФ
37 xXeNoNx
 
06.03.21
16:20
а кто тебе посоветовал положить все во временную таблицу и проиндексировать?
38 bfss-732
 
06.03.21
16:27
(37) ↑ Выше по теме))
39 xXeNoNx
 
06.03.21
16:27
(35) у тебя в (0) написан код лучше чем в (25), оптимальнее, если не учитывать ТаблицаТоваров.Номенклатура.Код.
Я бы (0) обернул в подзапрос и левым соединением получил коды номенклатуры(подзапрос - спрНоменклатуры), но не наоборот (спрНоменклатуры - подзапрос)
40 bfss-732
 
06.03.21
16:27
(36) я "=" уже поменял на "В". Должно быть "В"
41 xXeNoNx
 
06.03.21
16:30
(38) Фотку прислать, где на заборе тоже написано.
Этот товарищ ссылку прислал, а сам ее даже не прочитал.

Там написано: "Конструкцию рекомендуется использовать по полям временных таблиц, по которым эта временная таблица будет соединяться с другими таблицами баз данных."

у тебя есть где-то это соединение?
42 bfss-732
 
06.03.21
16:32
(41) да, косяк мой
43 xXeNoNx
 
06.03.21
16:33
+ ПОМЕСТИТЬ В - это дамп твоего запроса в tempdb, а оно нужно дампить?
Смотри, база растет, количество документов увеличивается, деградация производительности твоего запроса будет происходить в любом случае
44 bfss-732
 
06.03.21
16:43
(39) "Обернул в подзапрос" это вложенный запрос?
45 1CnikPetya
 
06.03.21
17:00
(5) Здесь индексирование ничем не поможет, только запрос замедлит.
46 d4rkmesa
 
06.03.21
17:14
(20) Курсы не фуфло. ) Но уже как то неоднократно выяснили, что в большинстве случаев индексировать ВТ не стоит. ) Только, тсс, не говорите это на аттестации.
47 Itmaint
 
06.03.21
17:14
Если чисто позанудствовать тут одно место оптимизации:

-ТаблицаТоваров.Ссылка В(&СписокСФ)      Заменяем на внутреннее соединение

Но не факт, что будет улучшение.
48 Itmaint
 
06.03.21
17:16
(15) полнейшее непонимание темы у вас.
49 tndr3
 
06.03.21
17:20
(0) Я бы в две временные таблицы собрал бы данные из разных ТЧ с наложенными условиями, а потом бы их объединил...
Но вообще ж по регистру надо такие данные собирать.. Нет?
50 timurhv
 
06.03.21
17:29
(47) если в СписокСФ передается до 128 элементов, то в SQL используется конструкция IN со списком параметров. Если больше, то запрос 1С сам переделает под внутреннее соединение с временной таблицей.
51 Itmaint
 
06.03.21
17:47
(50) Спасибо. Я как раз пытался вспомнить, что магическое 128 у вас в (2) означает.
52 mikecool
 
06.03.21
20:14
(30) а под тебя копают и глубоко...
53 DAFA
 
07.03.21
08:37
(45) да я специально дал такой ответ посмотреть кто. что знает
интуиция подсказывает .что переделать с использованием временных табл через менеджер . даст результат
54 xXeNoNx
 
07.03.21
12:37
(53) Доказательства будут?
55 xXeNoNx
 
07.03.21
12:37
(44) Да, это вложенный запрос