|   |   | 
| 
 | Странное время выполнения запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        triviumfan 10.05.18✎ 11:53 | 
        Доброго дня, коллеги!
 есть запрос 
Не понимаю, почему он выполняется дольше чем этот: 
Ведь 1й использует итоги (да, они рассчитаны за этот период), что, собственно, должно влиять на производительность сего запроса, но этого не происходит. ЗЫ: задача - получить неликвидные товары (по ним нет движений за указанный период) | |||
| 1
    
        YaFedor 10.05.18✎ 11:55 | 
        (0) 1с вообще не рекомендует соединения с виртуальными таблицами. Создай временную и с ней соединяй     | |||
| 2
    
        RomanYS 10.05.18✎ 11:58 | 
        Почему за основную таблицу не взята РегистрНакопления.ПартииТоваровКомпании.Обороты?     | |||
| 3
    
        RomanYS 10.05.18✎ 11:59 | 
        *(2) извиняюсь "НЕ" не заметил     | |||
| 4
    
        Мандалай 10.05.18✎ 12:00 | 
        С временной таблицей оно, конечно, кошерней. Попробуй переделать на временную.     | |||
| 5
    
        triviumfan 10.05.18✎ 12:01 | 
        (1) результат запроса - 1кк записей, думаешь стоит в ВТ это хранить?))     | |||
| 6
    
        Мандалай 10.05.18✎ 12:02 | 
        У тебя ж Различные, или у тебя прям различных миллион?     | |||
| 7
    
        triviumfan 10.05.18✎ 12:03 | 
        Периодичность - год... неликвид по условию задачи - товар, по которому не было движений с год. Я беру обороты с периодичностью год. Итоги должны получиться мгновенно, но 1й выполнятся за 5с, а второй за 4с (данные обработки "Инструменты разработчика" 4.35).     | |||
| 8
    
        triviumfan 10.05.18✎ 12:03 | 
        (6) прямо миллион:")     | |||
| 9
    
        triviumfan 10.05.18✎ 12:04 | 
        (8) вот так "загажена" таблица номенклатуры)     | |||
| 10
    
        triviumfan 10.05.18✎ 12:05 | ||||
| 11
    
        Timon1405 10.05.18✎ 12:07 | 
        (7) Раз уж используете ИР, тыкните там(на копии!) в результатах запроса внизу на последнюю вкладку "Запрос результата", там будет кнопка "Трасса"(план запроса для лентяев). он предложит настроить техножурнал и потом выдаст вам план запроса.     | |||
| 12
    
        youalex 10.05.18✎ 12:08 | 
        В первом запросе РАЗЛИЧНЫЕ - не нужно
 возможно, есть смысл фильтровать по свойству - в параметрах вирт. таблицы | |||
| 13
    
        Галахад гуру 10.05.18✎ 12:08 | 
        (7) А если "год" выкинуть из параметров?     | |||
| 14
    
        1Сергей 10.05.18✎ 12:09 | 
        (0) вообще не вижу смысла в соединении     | |||
| 15
    
        Timon1405 10.05.18✎ 12:12 | 
        условие на НЕ - плохое, можно попробовать полное соединение с регистром + ГДЕ регистр.номенклатура есть нулл. но без плана запроса разговор ниочем конечно     | |||
| 16
    
        triviumfan 10.05.18✎ 12:13 | 
        (11) попробую позже, что-то она висит) 
 (12) да, различные лишнее, по привычке добавил) в параметрах это будет точно лишнее (13) ну, логично же, что будет хуже) (14) а зря, ведь мне не нужны записи с уже установленным ПВХ "неликвид" | |||
| 17
    
        triviumfan 10.05.18✎ 12:14 | 
        (15) да, тоже вариант, сейчас попробую. план будет чуть позже     | |||
| 18
    
        1Сергей 10.05.18✎ 12:14 | 
        (16) Для чего в запросе обращение к таблице Справочник.Номенклатура?     | |||
| 19
    
        triviumfan 10.05.18✎ 12:17 | 
        (18) чтобы получить номенклатуру БЕЗ ДВИЖЕНИЙ. Есть другой способ или я чего-то не знаю?!     | |||
| 20
    
        lodger 10.05.18✎ 12:19 | 
        (0) помимо всего вышеописанного, периодичность виртальной таблицы менять не пробовали? имхо, АВТО больше подходит.     | |||
| 21
    
        triviumfan 10.05.18✎ 12:19 | 
        (11) не умею настраивать ТЖ =)     | |||
| 22
    
        1Сергей 10.05.18✎ 12:19 | 
        (19) как-то так
 ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура НЕ ЗначенияСвойствОбъектов.Объект В (ВЫБРАТЬ РАЗЛИЧНЫЕ ПартииТоваровКомпанииОбороты.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Год, ) КАК ПартииТоваровКомпанииОбороты) И (ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ИЛИ ЗначенияСвойствОбъектов.Значение = &Неликвид) | |||
| 23
    
        1Сергей 10.05.18✎ 12:20 | 
        (22) + а, ну ещё условие на свойство впендюрить     | |||
| 24
    
        triviumfan 10.05.18✎ 12:21 | 
        (20) пробовал - разницы не вижу, хотя теоретически вряд ли оно больше подходит. кстати, ms sql 2014     | |||
| 25
    
        triviumfan 10.05.18✎ 12:22 | 
        (23) не у всей номенклатуры установлено свойство "неликвид", поэтому нужна основная таблица     | |||
| 26
    
        Галахад гуру 10.05.18✎ 12:23 | 
        (16) А ты попробуй.     | |||
| 27
    
        lodger 10.05.18✎ 12:23 | 
        (22) уверены, что в ЗначенияСвойствОбъектов есть все ссылки на номенклатуру?     | |||
| 28
    
        1Сергей 10.05.18✎ 12:24 | 
        Ну, ок. Таблица справочника нужна.
 Тогда бы сделал через временные таблицы | |||
| 29
    
        triviumfan 10.05.18✎ 12:25 | 
        (26) (24)     | |||
| 30
    
        triviumfan 10.05.18✎ 12:26 | 
        (27) их относительно мало. Свойства установлены примерно для 5% номенклатуры.     | |||
| 31
    
        hhhh 10.05.18✎ 12:30 | 
        (29) попробуй наоборот пустить запросы. Есть вероятность, что sql во втором запросе использует кэш от первого запроса, поэтому 2й быстрее.     | |||
| 32
    
        triviumfan 10.05.18✎ 12:33 | 
        (15) разнозначно.. время одинаковое
 
В общем.. полез в Profiler | |||
| 33
    
        triviumfan 10.05.18✎ 12:35 | 
        (31) пробовал - нет.     | |||
| 34
    
        Мандалай 10.05.18✎ 12:35 | 
        Попробуй вот эту строку убрать из соединений и впихнуть ее в другое место:
 И (ЗначенияСвойствОбъектов.Свойство = &Свойство). | |||
| 35
    
        hhhh 10.05.18✎ 12:37 | 
        (33) только после перезагрузки компа. для чистоты эксперимента     | |||
| 36
    
        lodger 10.05.18✎ 12:39 | 
        ну и для справки, сколько такой запрос займет по времени?
 ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект КАК НомЛиквид ПОМЕСТИТЬ Фильтр1 ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Свойство = &Свойство И ЗначенияСвойствОбъектов.Значение <> &Неликвид ; //// ВЫБРАТЬ РАЗЛИЧНЫЕ ПартииТоваровКомпанииОбороты.Номенклатура КАК Номенклатура ПОМЕСТИТЬ Фильтр2 ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Авто, НЕ Номенклатура В (Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1)) ОБЪЕДИНИТЬ Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1 ; //// ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ НЕ Номенклатура.Ссылка В (Выбрать Фильтр2.Номенклатура из Фильтр2 как Фильтр2) | |||
| 37
    
        Мандалай 10.05.18✎ 12:40 | 
        (36)Тогда соединение с временными таблицами и не Есть NULL     | |||
| 38
    
        Мандалай 10.05.18✎ 12:41 | 
        Пардон Есть NULL     | |||
| 39
    
        lodger 10.05.18✎ 12:41 | 
        (37) а, ну можно и так.     | |||
| 40
    
        triviumfan 10.05.18✎ 12:47 | 
        (36) пришлось "грохнуть", т.к. все повисло) збс запрос)))     | |||
| 41
    
        lodger 10.05.18✎ 12:49 | 
        (40) рад, что вам понравилось :)     | |||
| 42
    
        unregistered 10.05.18✎ 12:50 | 
        Объясните кто-нибудь чем это условие 
 ГДЕ ПартииТоваровКомпанииОбороты.Номенклатура ЕСТЬ NULL И ВЫБОР КОГДА ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЗначенияСвойствОбъектов.Значение = &Неликвид КОНЕЦ отличается от ГДЕ ПартииТоваровКомпанииОбороты.Номенклатура ЕСТЬ NULL И (ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ИЛИ ЗначенияСвойствОбъектов.Значение = &Неликвид) | |||
| 43
    
        Мандалай 10.05.18✎ 12:52 | 
        РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Авто, НЕ Номенклатура В (Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1)) 
 фуфуфу - дрянька редкостная, не рекомендуется в параметрах виртуальных таблиц такие вещи писать. | |||
| 44
    
        Адинэснег 10.05.18✎ 13:03 | 
        ВЫБРАТЬ РАЗЛИЧНЫЕ
 Об.Номенклатура ПОМЕСТИТЬ ТоварыСОборотами ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты КАК Об ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ПОМЕСТИТЬ НеликвидПоСвойству ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Значение = ИСТИНА И ЗначенияСвойствОбъектов.Свойство = &Неликвид ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СпрНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ТоварыСОборотами КАК ТоварыСОборотами ПО СпрНоменклатура.Ссылка = ТоварыСОборотами.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ НеликвидПоСвойству КАК НеликвидПоСвойству ПО СпрНоменклатура.Ссылка = НеликвидПоСвойству.Объект ГДЕ ТоварыСОборотами.Номенклатура ЕСТЬ NULL И НЕ СпрНоменклатура.ЭтоГруппа И НеликвидПоСвойству.Объект ЕСТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НеликвидПоСвойству.Объект ИЗ НеликвидПоСвойству КАК НеликвидПоСвойству | |||
| 45
    
        bolobol 10.05.18✎ 13:05 | 
        (43) Какие "такие"? Это же обычные параметры - начало, конец, условие     | |||
| 46
    
        Адинэснег 10.05.18✎ 13:08 | 
        +(44)сорян, под твой регистр:
 ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ПОМЕСТИТЬ ТоварыСОборотами ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Об ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ПОМЕСТИТЬ НеликвидПоСвойству ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Значение = ИСТИНА И ЗначенияСвойствОбъектов.Свойство = &Неликвид ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект, ЗначенияСвойствОбъектов.Значение ПОМЕСТИТЬ ЗначенияСвойства ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Свойство = &Свойство ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка, ЗначенияСвойства.Значение ИЗ (ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ТоварыСОборотами КАК ТоварыСОборотами ПО СпрНоменклатура.Ссылка = ТоварыСОборотами.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ НеликвидПоСвойству КАК НеликвидПоСвойству ПО СпрНоменклатура.Ссылка = НеликвидПоСвойству.Объект ГДЕ ТоварыСОборотами.Номенклатура ЕСТЬ NULL И НЕ СпрНоменклатура.ЭтоГруппа И НеликвидПоСвойству.Объект ЕСТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НеликвидПоСвойству.Объект ИЗ НеликвидПоСвойству КАК НеликвидПоСвойству) КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияСвойства КАК ЗначенияСвойства ПО Товары.Ссылка = ЗначенияСвойства.Объект | |||
| 47
    
        xXeNoNx 10.05.18✎ 13:10 | 
        (20) За таб. оборотов и "АВТО" - куля в лоб, выбирай из реальной таблицы!
 "НЕ Номенклатура В (" - по пальцам дать. Господа, достаньте консоль с планом запроса и посмотрите во что эти запросы преобразуются | |||
| 48
    
        1Сергей 10.05.18✎ 13:14 | 
        (32) Убери ты этот ВЫБОР из ГДЕ. Сделай как в (22)     | |||
| 49
    
        xXeNoNx 10.05.18✎ 13:14 | 
        а ещеб я затестил: 
 ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Об И ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании КАК Об ГДЕ об.Период МЕЖДУ &НачалоПериода И &КонецПериода | |||
| 50
    
        xXeNoNx 10.05.18✎ 13:16 | 
        +(49) Кстати в первом варианте "РАЗЛИЧНЫЕ" - не нужны, оно будет замедлять     | |||
| 51
    
        1Сергей 10.05.18✎ 13:27 | 
        (50) в данном случае да     | |||
| 52
    
        bolobol 10.05.18✎ 13:43 | 
        Т.е. нет смысла в получении оборотов, рассчитанных в виртуальной таблице, если не просить детализацю расчёта по периоду внутри интересующего периода оборота? Чё за дичь?     | |||
| 53
    
        bolobol 10.05.18✎ 13:46 | 
        Правильнее заставить систему посчитать сумму по группировке из измерений?     | |||
| 54
    
        xXeNoNx 10.05.18✎ 13:53 | 
        (52) Зависит от периодичности.     | |||
| 55
    
        bolobol 10.05.18✎ 13:59 | 
        (54) Да что зависит-то? Если цель виртуальной таблицы - представить предподготовленные отчётные данные.
 Периодичность - месяц, запрос за год, в месяц движений 273000. Предлагаете 12 * 273000 строк заново посчитать? И это будет быстрее, чем система сложит 12х цифр? | |||
| 56
    
        xXeNoNx 10.05.18✎ 14:01 | 
        (52) Детализация АВТО, как думаешь во что разворачивает твой запрос по регистру оборотов платформа?
 Открой чистую СКД, сделай выборку по регистру оборотов, поставь периодичность АВТО, посмотри поля которые можно выбрать и поставь периодичность МЕСЯЦ и так же посмотри что там можно выбрать А шлифануть: Возми консоль с планом запроса, сначала посмотри "гибридный запрос", который платформа генерит с периодичностью АВТО, а затем с периодичностью МЕСЯЦ. | |||
| 57
    
        xXeNoNx 10.05.18✎ 14:02 | 
        +(56) а если ее приаттачить левым соединением к чему-нить.., тут туши свет     | |||
| 58
    
        xXeNoNx 10.05.18✎ 14:02 | 
        (55) Оно все равно складывает, неявно для Вас     | |||
| 59
    
        xXeNoNx 10.05.18✎ 14:04 | 
        (55) Периодичность должна быть больше месяца, тогда это имеет смысл...     | |||
| 60
    
        triviumfan 10.05.18✎ 14:04 | 
        (15) запрос с оборотами
 https://yadi.sk/i/PUi-dNe73VfRVt Запрос с физ таблицей https://yadi.sk/i/PUi-dNe73VfRVt Параллелизм... | |||
| 61
    
        xXeNoNx 10.05.18✎ 14:05 | 
        "Если цель виртуальной таблицы - представить предподготовленные отчётные данные." - цель виртуальной таблицы - облегчить жизнь 1с-программистам     | |||
| 62
    
        triviumfan 10.05.18✎ 14:05 | ||||
| 63
    
        triviumfan 10.05.18✎ 14:07 | 
        параллельное выполнение даёт около 20% выигрыша)     | |||
| 64
    
        bolobol 10.05.18✎ 14:10 | 
        Запрос с физ таблицей выполнился в 10 раз дольше - это выигрыш в 20% ?
 Срочно - в спортлото! Не, обыгрывать вулкан через телеграмм! | |||
| 65
    
        Мандалай 10.05.18✎ 14:10 | 
        Чувак, ты сейчас только что оказался умнее половины тех, кто тебе давал советы :)     | |||
| 66
    
        xXeNoNx 10.05.18✎ 14:11 | 
        (63) неужели     | |||
| 67
    
        xXeNoNx 10.05.18✎ 14:12 | 
        Никто не говорит что нельзя использовать вирт Таблицу оборотов, можно, но нужно знать когда это может привести к проблемам     | |||
| 68
    
        unregistered 10.05.18✎ 14:13 | 
        Тут еще вопрос методический, зависящий от того как построена работа этого регистра. Может быть такое, что возвраты отражаются путём формирования записей с минусом (продажа - расход с "плюсом", а возврат - расход с "минусом"). Тогда в итоговых таблицах оборотов такой номенклатуры может не быть (если продали 10, а потом вернули -10, то 10-10=0).
 В таких случаях корректнее обращаться к таблице первичных движений. В любом случае, если даже брать таблицу итогов, то указываться периодичность (хоть "год", хоть "авто") не нужно. | |||
| 69
    
        triviumfan 10.05.18✎ 14:15 | 
        Странная эта штука, параллелизм, он то включается, то нет. Вот сейчас и для оборотов сработал. Время выполнения запроса странное, то 4 секунды, то 5, то 9.     | |||
| 70
    
        triviumfan 10.05.18✎ 14:15 | 
        В общем, возьму ка я физическую таблицу... ну их нафиг эти дурные итоги.     | |||
| 71
    
        xXeNoNx 10.05.18✎ 14:18 | 
        (70) только попадай в индексы)     | |||
| 72
    
        bolobol 10.05.18✎ 14:19 | 
        Что п второму пункту: "НЕ Номенклатура В (" ?
 Понятно одно - левое соединение с отбором по NULL. Чем оно не устраивает виртуальную таблицу, которая сама напрашивается на фильтр? Допустим, НЕ В (30000 значений из 100 тыщ всего) | |||
| 73
    
        triviumfan 10.05.18✎ 14:22 | 
        (71) Тут везде index seek. 
 (72) не понял вопроса | |||
| 74
    
        triviumfan 10.05.18✎ 14:23 | 
        (60) ппц, я скрины не те выложил, ахахаха     | |||
| 75
    
        bolobol 10.05.18✎ 14:26 | 
        (74) Да пофиг уже - тебе же уже написали, что ты оказался умнее доброй половины))     | |||
| 76
    
        triviumfan 10.05.18✎ 14:34 | 
        (68) спасибо за совет, уточню у постановщика задачи... может вообще все не так)     | |||
| 77
    
        xXeNoNx 10.05.18✎ 15:10 | 
        (72) Если это мне вопрос, то использование НЕ в условии ГДЕ, может быть проблема связанная с выбором оптимизатором не верного решения. Если ничего путаю     | |||
| 78
    
        xXeNoNx 10.05.18✎ 15:12 | 
        +(77) Нет, не путаю, вот ссылка:
 http://www.sql-server-performance.com/2017/t-sql-where/ | |||
| 79
    
        xXeNoNx 10.05.18✎ 15:13 | 
        +(78) А именно:
 Non-sargable search arguments in the WHERE clause, such as “IS NULL”, “<>”, “!=”, “!>”, “!<“, “NOT”, “NOT EXISTS”, “NOT IN”, “NOT LIKE”, and “LIKE ‘%500′” generally prevents (but not always) the query optimizer from using a useful index to perform a search. In addition, expressions that include a function on a column, expressions that have the same column on both sides of the operator, or comparisons against a column (not a constant), are not sargable. | |||
| 80
    
        triviumfan 10.05.18✎ 15:14 | 
        (77) нет, он умный, это мы тупые)     | |||
| 81
    
        xXeNoNx 10.05.18✎ 15:18 | 
        (80) умные иногда тоже тупят)     | |||
| 82
    
        bolobol 10.05.18✎ 15:39 | 
        (79) Так тут про "Non-sargable", а у нас в примере "sargable".     | |||
| 83
    
        xXeNoNx 10.05.18✎ 15:53 | 
        Вот тут sargable(72)?
 Не вижу. Если еще нужно, для sargable, то вот: If you currently have a query that uses NOT IN, which offers poor performance because the SQL Server optimizer has to use a scan to perform this activity, instead try to use one of the following options, all of which offer better performance: Use EXISTS or NOT EXISTS. Use IN. Perform a LEFT OUTER JOIN and check for a NULL condition | |||
| 84
    
        xXeNoNx 10.05.18✎ 15:54 | 
        (82) Рекомендую ознакомится со ВСЕЙ статьей, думаю что все вопросы отпадут     | |||
| 85
    
        bolobol 10.05.18✎ 16:00 | 
        (84) в (43) порекомендуй, там не в курсе - гадости мерещатся.     | |||
| 86
    
        triviumfan 10.05.18✎ 16:04 | 
        Оказалось, что нужна номенклатура с остатком, а не из физ. таблицы :)     | |||
| 87
    
        bolobol 10.05.18✎ 16:06 | 
        (86), извини...
 (84) А конструкция "Use EXISTS or NOT EXISTS." - как в 1С выглядит? | |||
| 88
    
        xXeNoNx 10.05.18✎ 16:16 | 
        (87) не встречался     | |||
| 89
    
        bolobol 10.05.18✎ 16:39 | 
        И, получается, что не исключать из выборки 30% ненужного выгодно, а соединять с 70% нужного. Да, про то я забыл совсем, про ограничение такое в эскуэль     | |||
| 90
    
        bolobol 10.05.18✎ 16:59 | 
        (86) Так а вопрос какой-то актуальным остался?
 Просто, даже из (0) - разница 4 и 5 секунд - ниочём. Вот 35 секунд 5 секунд - это показатель. И такое реально бывает, индексировать временные таблицы приходится, например | |||
| 91
    
        xXeNoNx 10.05.18✎ 17:14 | 
        (89) 
 "что не исключать из выборки 30% ненужного выгодно, а соединять с 70% нужного" - ну почему же не исключать, исключать ненужное крайне желательно. Все становится очевидно(или нет), когда посмотришь план выполнения запроса. | |||
| 92
    
        bolobol 10.05.18✎ 17:19 | 
        (91) Эх, знал бы я, как смотреть план... Да у меня и базы такой нет, чтобы увидеть разницу. Нет запроса, выполняющегося дольше 5 секунд     | |||
| 93
    
        xXeNoNx 10.05.18✎ 17:21 | 
        (92) Консоль запросов на ИТС, подойдут любые запросы по регистру оборотов     | |||
| 94
    
        youalex 10.05.18✎ 19:33 | 
        (87) эмулируется как ГДЕ 1 В (ВЫБРАТЬ Первые 1 1 ИЗ...)     | |||
| 95
    
        triviumfan 10.05.18✎ 20:09 | 
        (90) Для меня разница в секунду существенна) Поэтому я и запили тему. Кстати, планы запросов оказались почти идентичны, оба распралаллеливаются, но есть тонкие отличия в логике, думаю, даже нет смысла спрашивать их тут =)
 Т.к. постановка задачи была изменена, то для решения достаточно виртуальной "ОстаткиИОбороты". 
Проверил - результат вроде правильный, и выполняется около секунды. | |||
| 96
    
        triviumfan 10.05.18✎ 20:11 | 
        (95) Наверное, лучше соединением фильтровать/исключать, но точно не в параметрах ВТ :)     | |||
| 97
    
        triviumfan 10.05.18✎ 20:18 | 
        Исправим, а то закидают помидорками:)  
 | |||
| 98
    
        xXeNoNx 11.05.18✎ 10:25 | 
        (97) Будет тормозить
 Какой тип у "ЗначенияСвойствОбъектов.Объект"? А соединение с составным типом к чему может привести? | |||
| 99
    
        xXeNoNx 11.05.18✎ 10:29 | 
        (97) Использование "РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты" оправдано?     | |||
| 100
    
        xXeNoNx 11.05.18✎ 10:59 | 
        +(99) Используй ВЫРАЗИТЬ(ЗначенияСвойств.Объект КАК Справочник.Номенклатура)     | |||
| 101
    
        Timon1405 11.05.18✎ 11:16 | 
        (98) (100) вы не понимаете о чем пишете
 соединение с составным типом тормозит когда из него получается реквизит через точку. а ЗначенияСвойствОбъектов.Объект КАК Номенклатура и так ссылочный тип номенклатура, не нужно ничего выражать | |||
| 102
    
        xXeNoNx 11.05.18✎ 11:36 | 
        (101) Откуда Вам знать что я понимаю, а что нет?  "Зарапартовался"     | |||
| 103
    
        VS-1976 11.05.18✎ 11:42 | 
        Выполняется дольше, по тому что ты в первом запросе используешь виртуальную таблицу, которая выгребает в том числе и остатки, а во втором случае физическую таблицу. Так как номенклатура содержится в индексе, то чтение всей таблицы не происходит, а только индекса скорее всего. А вообще правильнее на мой взгляд писать запрос таким образом, но и он скорее всего не оптимален но достаточен:
 ВЫБРАТЬ спрНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК спрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании ГДЕ Период МЕЖДУ &НачалоПериода И &КонецПериода ) КАК тзФильтр ПО спрНоменклатура.Ссылка = тзФильтр.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК тзЗначения ПО спрНоменклатура.Ссылка = тзЗначения.Объект И тзЗначения.Свойство = &Свойство ГДЕ тзФильтр.Номенклатура ЕСТЬ NULL И ( тзЗначения.Значение ЕСТЬ NULL Или тзЗначения.Значение = &Неликвид ) | |||
| 104
    
        Повелитель 11.05.18✎ 11:44 | 
        (0) 
 (7) 1й выполнятся за 5с, а второй за 4с Тема не о чем. Весь сыр бор из 1 секунды! Допустим твой час стоит 1000 рублей. Ты на форуме провисел 8 часов, затратил на оптимизацию 8000 рублей. Оптимизацию в 1 секунду? Директор бы увидел, уволил. | |||
| 105
    
        VS-1976 11.05.18✎ 11:47 | 
        (104) На разном железе с разным периодом может быть разница не в секунду... А так нужно сразу стараться писать правильно и всё не будет никаких 2-х вариантов.     | |||
| 106
    
        xXeNoNx 11.05.18✎ 11:52 | 
        (103) Соединение с подзапросом?     | |||
| 107
    
        Повелитель 11.05.18✎ 11:55 | 
        (105) Если отчет используют десятки или сотни раз в день, то его стоит оптимизировать.
 Если его используют 1 раз в неделю, а такие отчеты как в (0) используют не часто, да пусть он хоть 30 секунд выполняется. | |||
| 108
    
        VS-1976 11.05.18✎ 11:58 | 
        (107) Это да. Но мозг прокачивать всё же нужно, так что пусть тренеруется     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |