Имя: Пароль:
1C
1С v8
Оптимизировать запрос
0 Аксалотль
 
21.06.17
11:48
Можно ли как нибудь оптимизировать этот запрос что бы быстрее работал?


ВЫБРАТЬ
    ЦеныСрезПоследних.Номенклатура
ПОМЕСТИТЬ НоменклатураПоТипуЦен
ИЗ
    РегистрСведений.Цены.СрезПоследних(&Момент, ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НоменклатураПоТипуЦен.Номенклатура,
    ОграничениеАссортиментаПодразделенияСрезПоследних.Состояние,
    ДополнительныеПараметрыНоменклатурыСрезПоследних.ОсновнойПоставщик
ПОМЕСТИТЬ АссортПостав
ИЗ
    НоменклатураПоТипуЦен КАК НоменклатураПоТипуЦен
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеПараметрыНоменклатуры.СрезПоследних(&Момент, ПодразделениеНазначения = &Подразделение) КАК ДополнительныеПараметрыНоменклатурыСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура.Ссылка = ДополнительныеПараметрыНоменклатурыСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОграничениеАссортиментаПодразделения.СрезПоследних(&Момент, ПодразделениеКомпании = &Подразделение) КАК ОграничениеАссортиментаПодразделенияСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура = ОграничениеАссортиментаПодразделенияСрезПоследних.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныСрезПоследних.Цена,
    АссортПостав.ОсновнойПоставщик КАК Поставщик,
    АссортПостав.Состояние КАК Ассортимент,
    АссортПостав.Номенклатура КАК Товар
ИЗ
    АссортПостав КАК АссортПостав
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
        ПО АссортПостав.ОсновнойПоставщик = ЦеныСрезПоследних.Контрагент
1 Fragster
 
гуру
21.06.17
12:00
а нафиг в последнем запросе запрашиваются данные из того же регистра, что и в первом?
2 xXeNoNx
 
21.06.17
12:05
1. Нет индексов
2. Соединение с регистром без выборки
3. Нет ограничения по номенклатуре в РС
3 Рэйв
 
21.06.17
12:06
(0)зачем тебе вт НоменклатураПоТипуЦен если ты ее потом нигде не используешь? Для красоты?
4 Рэйв
 
21.06.17
12:06
аа.сторно.Во второй вт:-)
5 xXeNoNx
 
21.06.17
12:07
(1) Повангую: Момент <> ТекущаяДата
Динамика цен?
6 catena
 
21.06.17
12:08
+(5)Там еще ограничения по типу цен нет.
8 xXeNoNx
 
21.06.17
12:09
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
        ПО АссортПостав.ОсновнойПоставщик = ЦеныСрезПоследних.Контрагент

вот тут загадка...
9 Лефмихалыч
 
21.06.17
12:10
ПодразделениеКомпании = &Подразделение
И Номенклатура в (ВЫБРАТЬ НоменклатураПоТипуЦен.Номенклатура из НоменклатураПоТипуЦен)
10 Лефмихалыч
 
21.06.17
12:11
в последнем запросе - тоже отобрать по номенклатуре
11 Лефмихалыч
 
21.06.17
12:11
а в РегистрСведений.Цены - нет типов цен?
12 Лефмихалыч
 
21.06.17
12:13
+(10) там даже (Контрагент, Номенклатура) В (ВЫБРАТЬ)
13 rabbidX
 
21.06.17
12:13
(2)
1) Если товаров по типу цен меньше 1000, индекс только замедлит запрос
2) Согласен
3) Запрос в параметрах виртуальной таблицы, также может увеличить время выполнения

(0) Попробуйте вместо третьего запроса добавить соединение во втором.
14 rabbidX
 
21.06.17
12:14
(6) Там цены контрагентов, ограничение по типу цен не нужно.
15 wayss
 
21.06.17
12:15
(0) какая СУБД?
16 xXeNoNx
 
21.06.17
12:16
(0) Вбросил и свалил..
Тебе оптимальный запрос написать?
17 Лефмихалыч
 
21.06.17
12:17
(13) "может увеличить время" - не повод пренебрегать отборами виртуальных таблиц. Особенно, когда, подобно автору, ни хрена не соображаешь
18 Аксалотль
 
21.06.17
12:17
(16) Я тут, внимательно читаю и думаю :)
19 xXeNoNx
 
21.06.17
12:19
(13) 1. Если товаров меньше 1000, то вопрос с оптимизацией не поднялся бы
3. Смотря по чему запрос...
20 xXeNoNx
 
21.06.17
12:25
+(19) даже если меньше 1000, если несколько соединений по этому полю, то это в любом случае будет эффективнее чем без индексов, если это только не выборка, например, в 10 позиций - тогда не имеет смысла... Любая индексация должна быть оправдана!
21 dezss
 
21.06.17
12:26
А может попробовать все 3 запроса объединить в 1?
22 xXeNoNx
 
21.06.17
12:27
(21) С вложенными подзапросами?
23 dezss
 
21.06.17
12:27
(22) зачем?
24 dezss
 
21.06.17
12:28
(23) тут же это и так напрашивается, разве нет?

ВЫБРАТЬ
    ЦеныСрезПоследних.Номенклатура
ИЗ
    РегистрСведений.Цены.СрезПоследних(&Момент, ТипЦен = &ТипЦен) КАК НоменклатураПоТипуЦен
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеПараметрыНоменклатуры.СрезПоследних(&Момент, ПодразделениеНазначения = &Подразделение) КАК ДополнительныеПараметрыНоменклатурыСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура.Ссылка = ДополнительныеПараметрыНоменклатурыСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОграничениеАссортиментаПодразделения.СрезПоследних(&Момент, ПодразделениеКомпании = &Подразделение) КАК ОграничениеАссортиментаПодразделенияСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура = ОграничениеАссортиментаПодразделенияСрезПоследних.Номенклатура;
25 xXeNoNx
 
21.06.17
12:29
(23) Тут как мин 3 регистра сведений
26 dezss
 
21.06.17
12:29
(24) тьфу

ВЫБРАТЬ
    ЦеныСрезПоследних.Номенклатура
    ОграничениеАссортиментаПодразделенияСрезПоследних.Состояние,
    ДополнительныеПараметрыНоменклатурыСрезПоследних.ОсновнойПоставщик
ПОМЕСТИТЬ АссортПостав
ИЗ
    РегистрСведений.Цены.СрезПоследних(&Момент, ТипЦен = &ТипЦен) КАК НоменклатураПоТипуЦен
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеПараметрыНоменклатуры.СрезПоследних(&Момент, ПодразделениеНазначения = &Подразделение) КАК ДополнительныеПараметрыНоменклатурыСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура.Ссылка = ДополнительныеПараметрыНоменклатурыСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОграничениеАссортиментаПодразделения.СрезПоследних(&Момент, ПодразделениеКомпании = &Подразделение) КАК ОграничениеАссортиментаПодразделенияСрезПоследних
        ПО НоменклатураПоТипуЦен.Номенклатура = ОграничениеАссортиментаПодразделенияСрезПоследних.Номенклатура;
27 xXeNoNx
 
21.06.17
12:29
(24) а левое соединение вирт. таблицы не смущает?
28 dezss
 
21.06.17
12:30
(27) я не в курсе этих тонкостей.
А что не так с этим будет?
29 xXeNoNx
 
21.06.17
12:32
(28) Как минимум неявная выборка всех полей регистра.
30 Timon1405
 
21.06.17
12:37
(0)
ошибка тут, лишняя .Ссылка
ПО НоменклатураПоТипуЦен.Номенклатура.Ссылка = ДополнительныеПараметрыНоменклатурыСрезПоследних.Номенклатура

нужно

ПО НоменклатураПоТипуЦен.Номенклатура = ДополнительныеПараметрыНоменклатурыСрезПоследних.Номенклатура
31 dezss
 
21.06.17
15:59
(29) почитал, понял...был не прав...
только тогда автору следует и 2 других обращения к вирт. таблицам запихнуь в вт.
32 youalex
 
21.06.17
16:16
В первом запросе - срез не нужен, ВЫБРАТЬ РАЗЛИЧНЫЕ  + условия по типу,   периоду и активности