Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Оптимизация запроса 1С

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.