|   |   | 
| 
 | Понедельничный вопрос: что можно улучшить в этом запросе | ☑ | ||
|---|---|---|---|---|
| 0
    
        Fragster гуру 12.09.16✎ 11:39 | 
        Регистр накопления ОстаткиТовара содержит два измерения: Склад и Номенклатура, а также ресурс Количество. Необходимо запросом получить список всей номенклатуры, с указанием количества товаров на конкретном складе.
 ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиТоваров.Остаток, 0 ) КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНИЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК ОстаткиТоваров ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка | |||
| 1
    
        Волшебник модератор 12.09.16✎ 11:42 | 
        Можно добавить условие, что товар вообще поступал хоть раз на склад, чтобы было поменьше мусора.
 Или хотя бы отфильтровать услуги. | |||
| 2
    
        Fragster гуру 12.09.16✎ 11:45 | 
        (1) вообще речь не про улучшение "для пользователя", а для "технической" эффективности запроса, так что эти замечания не актуальны     | |||
| 3
    
        Метранпаж 12.09.16✎ 11:47 | 
        а платформа 8.2 или 8.3 ?     | |||
| 4
    
        Волшебник модератор 12.09.16✎ 11:48 | 
        (2) В некоторых базах спр. Номенклатура содержит миллионы позиций. Так что фильтр поможет ускорить запрос.     | |||
| 5
    
        Fragster гуру 12.09.16✎ 11:49 | 
        (3) вообще правильный ответ даже на 8.0 правильный, но если у тебя есть замечания в разрезе платформ - это замечательно, пиши     | |||
| 6
    
        H A D G E H O G s 12.09.16✎ 11:49 | 
        Фильтр по складу вынести в условия связи.
 ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка и ОстаткиТоваров.Склад=&Склад | |||
| 7
    
        Fragster гуру 12.09.16✎ 11:50 | 
        (4) допустим у нас только товары, пусть и миллионы. как условие "что товар хотя бы раз поступал на склад" технически ускорит выполнение     | |||
| 8
    
        Fragster гуру 12.09.16✎ 11:50 | 
        (6) напиши полный текст     | |||
| 9
    
        Метранпаж 12.09.16✎ 11:54 | 
        (5) вроде в 8.3 изменилась структура индекса. В 8.2 и меньше было период, поля. в 8.3  - поля, период.
 Так что если у тебя 8.2, то ты можешь не попасть в индекс. | |||
| 10
    
        H A D G E H O G s 12.09.16✎ 11:55 | 
        ВЫБРАТЬ
 спрНоменклатура.Ссылка, ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК Количество ИЗ Справочник.Номенклатура КАК спрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки ПО спрНоменклатура.Ссылка = ОстаткиТоваровОстатки.Номенклатура И (ОстаткиТоваровОстатки.Склад = &Склад) | |||
| 11
    
        H A D G E H O G s 12.09.16✎ 11:57 | 
        (9) Ты прям как про малиновый звон. Все слышали и не слышали.
 Период передвинули у РС. | |||
| 12
    
        Fragster гуру 12.09.16✎ 11:57 | 
        (10) хм... надо проверить     | |||
| 13
    
        KODin1C 12.09.16✎ 12:05 | 
        (0) Условие НЕ ЭтоГруппа     | |||
| 14
    
        mistеr 12.09.16✎ 12:05 | 
        (6) По-моему, станет только хуже. Уыеличится количество записей при соединении.     | |||
| 15
    
        Feanor 12.09.16✎ 12:10 | 
        (10) из параметров ВТ склад специально убрал?     | |||
| 16
    
        H A D G E H O G s 12.09.16✎ 12:25 | 
        (15) да     | |||
| 17
    
        Feanor 12.09.16✎ 12:27 | 
        (16) а в чем от этого будет бонус?     | |||
| 18
    
        Мимохожий Однако 12.09.16✎ 12:32 | 
        (0)возьми несколько вариантов запроса и прогони в отладчике через замер производительности. Оставь наиболее быстрый.     | |||
| 19
    
        dmpl 12.09.16✎ 12:34 | 
        (18) Не поможет. Кеширование все испортит.     | |||
| 20
    
        hhhh 12.09.16✎ 12:42 | 
        (17) если регистр не индексируется по Склад, то бонус будет     | |||
| 21
    
        ovrfox 12.09.16✎ 12:42 | 
        (0) еще никто не написал - в регистре "остаткитоваров" перенести Склад на первое место или указать еще и органиазцию     | |||
| 22
    
        ovrfox 12.09.16✎ 12:45 | 
        (21) Извините, забыл, что измерение организация отсутсвует в регистре.
 Еще можно проверить время выполнения запроса ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, 0 КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура И сравнить с исходным. Убедиться что проблема в к-ве записей в справочнике номенклатура и перестать оптимизировать запрос | |||
| 23
    
        Feanor 12.09.16✎ 12:46 | 
        (20) как отсутствие индекса по складу поможет ускорить запрос в данном случае?     | |||
| 24
    
        ovrfox 12.09.16✎ 12:53 | 
        (23) Регистр накопления не бывает без индекса     | |||
| 25
    
        Feanor 12.09.16✎ 16:53 | 
        (24) Очень ценное замечание, спасибо!     | |||
| 26
    
        aleks_default 12.09.16✎ 17:28 | 
        Что тут оптимизировать, кроме постановки задачи?     | |||
| 27
    
        aleks_default 12.09.16✎ 17:29 | 
        блин, гребанные запятые, лезут под пальцы:)     | |||
| 28
    
        xafavute 12.09.16✎ 17:35 | 
        поставить первым измерением номенклатуру     | |||
| 29
    
        H A D G E H O G s 12.09.16✎ 17:38 | 
        (28) не надо так делать.     | |||
| 30
    
        xafavute 12.09.16✎ 17:39 | 
        (29) почему?     | |||
| 31
    
        H A D G E H O G s 12.09.16✎ 17:41 | 
        (30) Зачем?     | |||
| 32
    
        xafavute 12.09.16✎ 17:46 | 
        (31) Измерение номенклатура более селективное, поэтому индекс будет работать лучше     | |||
| 33
    
        H A D G E H O G s 12.09.16✎ 17:51 | 
        (32) Скорее всего, Анатолий, ты хотел сказать
 "поэтому индекс будет срабатывать чаще". Как часто вы получаете остатки конкретных номенклатур без указания склада? Я вот с таким почти и не встречался. | |||
| 34
    
        xafavute 12.09.16✎ 17:54 | 
        (33) не чаще, а быстрее     | |||
| 35
    
        RomanYS 12.09.16✎ 17:55 | 
        (12) очень ждем результатов     | |||
| 36
    
        xafavute 12.09.16✎ 17:55 | 
        Я про поиск Склад+Номенклатура по индексу 2х полей склад и номенклатура     | |||
| 37
    
        xafavute 12.09.16✎ 17:55 | 
        И индекс Склад+Номенклатура отличается от индекса Номенклатура+Склад     | |||
| 38
    
        xafavute 12.09.16✎ 17:57 | 
        (35) Остатки на текущую дату - это плоская таблица, поэтому условия в ней не нужны     | |||
| 39
    
        H A D G E H O G s 12.09.16✎ 17:58 | 
        (36) (37) Ну ты загнул. Нашел, где производительность выжимать. В индекс еще попасть надо.     | |||
| 40
    
        xafavute 12.09.16✎ 17:59 | 
        Тут в индекс всяко попадаем     | |||
| 41
    
        xafavute 12.09.16✎ 17:59 | 
        А если склад всего 1-2, то индекс по складу вообще не нужен     | |||
| 42
    
        zak555 12.09.16✎ 18:04 | 
        может сначала в ВТ остатки по складу
 а потом склеить со справочником ? | |||
| 43
    
        H A D G E H O G s 12.09.16✎ 18:05 | 
        Да, ты прав.
 Никогда не задумывался, что поиск по индексу без остаточных предикатов тоже может быть разным. | |||
| 44
    
        Мыш 12.09.16✎ 18:16 | 
        (42) И не забыть проиндексировать. ) 
 Вот тока утром книжку про "это" читал ) | |||
| 45
    
        DTX 4th 12.09.16✎ 18:25 | 
        (32) Не понял. Где номенклатуру надо на первое место поставить?     | |||
| 46
    
        zak555 12.09.16✎ 18:32 | 
        (44) и номенклатуру отобрать в вт без групп и услуг
 а уж потом склеивать | |||
| 47
    
        Мыш 12.09.16✎ 18:35 | 
        (45) Не совсем так. 
 Почти цитата: "Подходящим является индекс, содержащий все поля из условия, эти поля в самом начале индекса, эти поля идут подряд (между ними нет полей не участвующих в условии)" | |||
| 48
    
        Мимохожий Однако 12.09.16✎ 18:40 | 
        (19) Кэш тоже можно учесть     | |||
| 49
    
        dmpl 12.09.16✎ 20:20 | 
        (33) Чаще, чем выборка всей номенклатуры по складу, которая на этот склад и не приходовалась никогда... кому интересно искать 2-3 строчки остатков среди миллиона? В реальной жизни достаточно выбрать остатки из регистра и вообще с справочником не соединять.
 P.S. Прихожу я в магазин - на витрине ценник есть, товара нет. На складе магазина тоже нет. Я спрашиваю у продавца, а где у них есть? Продавец должен мне сказать - т.е. посмотреть конкретную позицию номенклатуры по всем складам. (37) В случае 1С оптимизатор сам сделает как надо, если не мешать. Помощь ему требуется только в особо сложных случаях и с 3-4-уровневым разыменовыванием. (48) Один фиг тестировать на боевом сервере, т.к. надо же еще и нагрузку от параллельно работающих пользователей учесть. Тут проще просто собирать статистику времени исполнения запроса у реальных пользователей в реальной рабочей базе. | |||
| 50
    
        Azxcvbn 13.09.16✎ 07:58 | 
        (0) Зачем брать записи всего справочника, если правильней просто взять записи с регистра накопления?
 Чего нет - того нет | |||
| 51
    
        ViSo76 13.09.16✎ 08:49 | 
        (49) 1С оптимизатор сам сделает как надо...
 Это что за чудо юдо рыба кит? PS: Некоторые думают что под капотом РСУБД есть искусственный интеллект - оптимизатор, и он перестраивает за них все кривые запросы. | |||
| 52
    
        Мыш 13.09.16✎ 08:58 | 
        (49) Смотрим профайлер, ищем следы оптимизатора )     | |||
| 53
    
        ViSo76 13.09.16✎ 09:16 | 
        (52) Типа комментария - здесь был оптимизатор.     | |||
| 54
    
        Мыш 13.09.16✎ 09:22 | 
        (53) Ага. Посмотрел на весь бардак, плюнул и молча ушел )))     | |||
| 55
    
        ViSo76 13.09.16✎ 09:27 | 
        Возможно вместо соединения быстрее будет группировка, но не уверен, нужно проверять...
 ВЫБРАТЬ Товар, СУММА( Остаток ) КАК Остаток ИЗ ( ВЫБРАТЬ Ссылка КАК Товар, 0 КАК Остаток ИЗ Справочник.Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Номенклатура, Остаток ИЗ РегистрНакопления.ОстаткиТоваров.Остатки( , Склад = &Склад ) ) КАК тзОстаток СГРУППИРОВАТЬ ПО тзОстаток.Товар | |||
| 56
    
        ТупойИЖадный 13.09.16✎ 09:28 | 
        1. В условии виртуальной таблицы отбор по складу оставь.
 2. Результат запроса к виртуальной таблице выгрузи во временную таблицу. 3. Сделай выборку по справочнику "Номенлатура" (возможно, без групп) и вяжи ее левым соединением с временной таблицей из п.2. | |||
| 57
    
        1dvd 13.09.16✎ 09:37 | 
        (56) +1
 Вообще не понял. Кому могло в голову только придти, чтобы убрать склад из параметров ВТ? | |||
| 58
    
        ptiz 13.09.16✎ 10:03 | 
        (57) Это следующий уровень понимания, не для всех доступный.     | |||
| 59
    
        ViSo76 13.09.16✎ 10:17 | 
        Я думаю что убирать склад из ВТ очень спорный момент, я считаю что в большинстве случаев фильтр по складу в ВТ нужен, кроме случая когда всегда будет использоваться один склад     | |||
| 60
    
        xafavute 13.09.16✎ 10:19 | 
        хотя я тут вычитал, что в любом случае вт разворачивается в подхапрос с группировками, даже если на текущую дату     | |||
| 61
    
        ViSo76 13.09.16✎ 10:29 | 
        (60) ВТ Остатки это "системная" таблица остатков на начало периода + движения от этой таблицы до даты указанной в первом параметре, естественно будет группировка в запросе. Фильтр по складу, даже если будет full scan уменьшит объём группировки и объём занимаемой памяти в случае активных движений на других складах.     | |||
| 62
    
        ТупойИЖадный 13.09.16✎ 11:38 | 
        (61) Осмелюсь поумничать.
 Фраза "ВТ Остатки это "системная" таблица остатков на начало периода + движения от этой таблицы до даты указанной в первом параметре" не совсем верна. В 1С это "ВТ Остатки это "системная" таблица остатков на КОНЕЦ периода - движения от этой таблицы до даты указанной в первом параметре" | |||
| 63
    
        Timon1405 13.09.16✎ 11:52 | 
        а итоги замеров будут озвучены?     | |||
| 64
    
        Fragster гуру 13.09.16✎ 11:54 | 
        (63) http://its.1c.ru/db/v8std/content/2149184382/hdoc , но вопрос в том, почему у меня не получилось сделать без группировки вложенного запроса (смотрю профайлером) разные варианты     | |||
| 65
    
        H A D G E H O G s 13.09.16✎ 11:56 | 
        (64) Чтобы свернуть разделитель итогов.     | |||
| 66
    
        Fragster гуру 13.09.16✎ 12:02 | 
        (65) это я понял. вопрос не "зачем", а "почему у меня группировка из вложенного не уходит"?     | |||
| 67
    
        H A D G E H O G s 13.09.16✎ 12:03 | 
        (66) Не понял твоего вопроса вот сейчас     | |||
| 68
    
        Fragster гуру 13.09.16✎ 12:05 | 
        (67) во всех вариантах, которые я пробовал - вложенный запрос все равно с group. из ИТС я понял, что при таком изменении текста group пропадет. уже и разделение итогов выключил, и сами итоги пересчитывал, а оно все равно не уходит.     | |||
| 69
    
        H A D G E H O G s 13.09.16✎ 12:06 | 
        (68) У меня нет доступа к ИТС.     | |||
| 70
    
        Fragster гуру 13.09.16✎ 12:07 | 
        (69) смешно     | |||
| 71
    
        H A D G E H O G s 13.09.16✎ 12:08 | 
        (70) В смысле смешно?     | |||
| 72
    
        ptiz 13.09.16✎ 12:11 | 
        (68) А какая платформа? Может, поменяли поведение?     | |||
| 73
    
        xXeNoNx 13.09.16✎ 12:12 | 
        Предлагаю получить остатки сначала, затем при объединении со справочником исключать ту номенклатуру(Выборка из справочника), которая была в остатках.
 ну и исключить группы, услуги и помеченные на удаление(как вариант) | |||
| 75
    
        Fragster гуру 13.09.16✎ 12:13 | 
        (69)    | |||
| 76
    
        H A D G E H O G s 13.09.16✎ 12:13 | 
        (75) Понял. Чуть позже проверю     | |||
| 77
    
        bolobol 13.09.16✎ 12:23 | 
        Никак не понял, зачем ещё "И ОстаткиТоваров = &Склад", если условие по складу виртуальной таблицы уже отсекло все склады, кроме одного?     | |||
| 78
    
        Fragster гуру 13.09.16✎ 12:26 | 
        (77) между запросами написано     | |||
| 79
    
        bolobol 13.09.16✎ 12:28 | 
        (78) Напоминает "между ног... что-то там" )) Что именно написано такого, что отвечает на моё непонимание написанного?     | |||
| 80
    
        Timon1405 13.09.16✎ 12:28 | 
        -СОЕДИНИЕНИЕ! соединИение, Карл
 -расслабься, это ИТС | |||
| 81
    
        bolobol 13.09.16✎ 12:30 | 
        (78) Ой, "между *строк написано..." ))     | |||
| 82
    
        ptiz 13.09.16✎ 12:32 | 
        В 8.2 - работает как написано на ИТС.
 А в 8.3 - вылезла группировка :) | |||
| 83
    
        Fragster гуру 13.09.16✎ 12:34 | 
        (82) вот негодяи     | |||
| 84
    
        zak555 13.09.16✎ 12:38 | 
        так быстрее не будет ?
 ВЫБРАТЬ ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура, ОстаткиТоваровОстатки.ОстатокОстаток КАК Остаток ПОМЕСТИТЬ Остатки ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК ОстаткиТоваровОстатки ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ПОМЕСТИТЬ Товары ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ НЕ Номенклатура.ЭтоГруппа И НЕ Номенклатура.Услуга ИНДЕКСИРОВАТЬ ПО Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка, ЕСТЬNULL(Остатки.Остаток, 0) КАК Остаток ИЗ Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки ПО Товары.Ссылка = Остатки.Номенклатура | |||
| 85
    
        aleks_default 13.09.16✎ 12:43 | 
        (84) У справочника итак индекс по ссылке есть, какой смысл его еще раз целиком индексировать?     | |||
| 86
    
        ViSo76 13.09.16✎ 12:45 | 
        (62) Да вы правы, спасибо за уточнение, правда бывает исключение в виде:
 Таблица итогов регистра накопления остатков хранит текущие итоги на момент времени последнего движения (актуальные итоги). Дополнительно к этому могут храниться промежуточные итоги, если установлен период рассчитанных итогов. Период рассчитанных итогов влияет только на производительность при получении итогов на некоторую промежуточную дату; если он установлен, итоги будут получены быстрее. Профессиональная разработка в системе «1С:Предприятие 8» издание 2, стр. 548 (75) Если не указывать остатки на дату, то выбираются текущие ( готовые ) остатки, свёрнутые по измерениям с просуммированными ресурсами. | |||
| 87
    
        jsmith 13.09.16✎ 12:47 | 
        Оптимизация это развлечения для перцев с 64 Кб ОЗУ :)     | |||
| 88
    
        ptiz 13.09.16✎ 12:49 | 
        (83) Как-то странно. На одной базе 8.2 - получилось, на другой - нет. Пытаюсь найти разницу.     | |||
| 89
    
        Fragster гуру 13.09.16✎ 12:52 | 
        (88) попробуй поиграть с разделением итогов     | |||
| 90
    
        aleks_default 13.09.16✎ 12:54 | 
        (89)А можно озвучить выигрыш в производительности?     | |||
| 91
    
        zak555 13.09.16✎ 12:56 | 
        (85) погорячился     | |||
| 92
    
        H A D G E H O G s 13.09.16✎ 12:58 | 
        (90) Там лишний подзапрос с группировкой не будет сгенерин, что, кстати, не критично и sql нормально его оптимизирует в большинстве случаев.     | |||
| 93
    
        H A D G E H O G s 13.09.16✎ 12:59 | 
        (92) Но в большинстве своем это бессмысленно, так как остаточные регистры используют разделение итогов в большинстве своем и это влечет за собой вложенный запрос.     | |||
| 94
    
        ptiz 13.09.16✎ 12:59 | 
        (89) Да, без разделения итогов работает.     | |||
| 95
    
        H A D G E H O G s 13.09.16✎ 13:01 | 
        (84) Ты пытаешься ткнуть чем-то в что-то.     | |||
| 96
    
        Fragster гуру 13.09.16✎ 13:12 | 
        (92) ну, там порой непонятная магия творится
 (93) поплакал об этом на партнерском | |||
| 97
    
        H A D G E H O G s 13.09.16✎ 13:25 | 
        (96) "поплакал об этом на партнерском"
 А смысл? Как бы ты свернул разделение итогов? | |||
| 98
    
        H A D G E H O G s 13.09.16✎ 13:25 | 
        Только вложенный запрос или ВТ.     | |||
| 99
    
        Fragster гуру 13.09.16✎ 13:26 | 
        (97) поплакал о том, что такие статьи есть, а не о том, как работает платформа     | |||
| 100
    
        vicof 13.09.16✎ 13:26 | 
        (100)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |