Имя: Пароль:
1C
1С v8
Нужен ли индекс в запросе?
0 DirecTwiX
 
26.05.14
01:28
Хочется ускорить запрос:

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

СГРУППИРОВАТЬ ПО
    КлючАналитикаУчетаЗатрат.Затрата,
    КлючАналитикаВидаУчета.Склад

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад,
    КоличествоОстаток
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    ХозрасчетныйОстатки.Субконто2 КАК Склад,
    СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ОстаткиБУ
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментВремени, Счет В ИЕРАРХИИ (&Счет41), &СубкНомСклад, Организация = &Организация) КАК ХозрасчетныйОстатки

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто1,
    ХозрасчетныйОстатки.Субконто2

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад,
    КоличествоОстаток
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫБОР
        КОГДА ОстаткиБУ.Номенклатура ЕСТЬ NULL
            ТОГДА ОстаткиУУ.Номенклатура
        ИНАЧЕ ОстаткиБУ.Номенклатура
    КОНЕЦ КАК Номенклатура,
    ВЫБОР
        КОГДА ОстаткиБУ.Склад ЕСТЬ NULL
            ТОГДА ОстаткиУУ.Склад
        ИНАЧЕ ОстаткиБУ.Склад
    КОНЕЦ КАК Склад,
    ЕСТЬNULL(ОстаткиБУ.КоличествоОстаток, 0) КАК КоличествоБУ,
    ЕСТЬNULL(ОстаткиУУ.КоличествоОстаток, 0) КАК КоличествоУУ,
    ЕСТЬNULL(ОстаткиБУ.КоличествоОстаток, 0) - ЕСТЬNULL(ОстаткиУУ.КоличествоОстаток, 0) КАК Разница
ИЗ
    ОстаткиБУ КАК ОстаткиБУ
        ПОЛНОЕ СОЕДИНЕНИЕ ОстаткиУУ КАК ОстаткиУУ
        ПО ОстаткиБУ.Номенклатура = ОстаткиУУ.Номенклатура
            И ОстаткиБУ.Склад = ОстаткиУУ.Склад
            И ОстаткиБУ.КоличествоОстаток <> ОстаткиУУ.КоличествоОстаток

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Склад
АВТОУПОРЯДОЧИВАНИЕ
1 DirecTwiX
 
26.05.14
01:35
С соединением по количеству я перемудрил, но вопрос остаётся открытым)
2 H A D G E H O G s
 
26.05.14
01:36
1) Индексы не нужны
2) ОстаткиУУ разюить на 3 ВТ
3) Счет В ИЕРАРХИИ (&Счет41) избавить от ИЕРАРХИИ
3 Armando
 
26.05.14
01:37
Во втором запросе точно не нужна группировка. Индексы не нужны, если третий запрос переписать на объединение. Так даже луче будет
4 H A D G E H O G s
 
26.05.14
01:38
ОстаткиУУ разложить на Ключи аналитеки, отобранные по МПЗ и Организации (этого нет, странно), потом эти ключи засунуть в Фильтр ВТ, потом 3 ВТ соединить Остатки с 2-мя аналитегами
5 H A D G E H O G s
 
26.05.14
01:39
(3) если будет
ОБЪЕДИНИТЬ а не ОБЪЕДИНИТЬ ВСЕ - то монопенисуально.

Физику этого мира не обманешь, надо перебирать
6 Armando
 
26.05.14
01:41
(5) там по логике "все" надо
7 H A D G E H O G s
 
26.05.14
01:45
(6) Там, по логике, Объединить не катит.
8 H A D G E H O G s
 
26.05.14
01:46
Если "все" - там будут дубли, если без "все" - там будет первый из дубля
9 DirecTwiX
 
26.05.14
02:32
Спасибо всем!
(2) А если не разбивать УУ на 3 ВТ, индексы сработают? Т.е. ускорят запрос?
10 H A D G E H O G s
 
26.05.14
02:49
(9) нет. Ты немного почитай вот про это хотя бы
wiki:B%2B-деревья
и прикинь, что нужно сделать, чтобы построить такое дерево или просто сравнить перебором ключевое слово - один раз
11 Dionis Sergeevich
 
26.05.14
03:59
(10) а еще что почитать? я собственно не понял нифига. Вижу разумное звено в индексировании вт в данном примере. Накидай материала если не сложно - сочтемся потом)