|   |   | 
| 
 | Есть у кого идеи по оптимизации запроса? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Маленький Вопросик 09.08.22✎ 10:38 | 
        ВЫБРАТЬ
 | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | &Штрихкод КАК Штрихкод, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток, | КодыТоваровSKU.SKU КАК SKU |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ТекДата, | Склад.Магазин = &Магазин | И Номенклатура В | (ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Владелец | ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ГДЕ | Штрихкоды.Штрихкод = &Штрихкод)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU | ПО ТоварыНаСкладахОстатки.Номенклатура = КодыТоваровSKU.Номенклатура | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура, | КодыТоваровSKU.SKU | |||
| 1
    
        rphosts 09.08.22✎ 10:46 | 
        Не имея перед глазщами структуры сложно... ну вынеси во временную подзапрос из условия - СУБД будет чуть легче пронозировать     | |||
| 2
    
        Dmitrii гуру 09.08.22✎ 10:48 | 
        (0) А зачем тут группировка, если склада в полях запроса нет?     | |||
| 3
    
        Kassern 09.08.22✎ 10:49 | 
        (0) Вот это перепишите И Номенклатура В
 | (ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Владелец | ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ГДЕ | Штрихкоды.Штрихкод = &Штрихкод)) | |||
| 4
    
        Кир Пластелинин 09.08.22✎ 10:51 | 
        а левое соединение никого не смутило?     | |||
| 5
    
        ptiz 09.08.22✎ 10:56 | 
        (0) А сейчас насколько медленно работает? Судя по коду, вычисление номенклатуры и массива складов можно сделать вне запроса и отдать ему готовые параметры. Если нет - хотя бы через временную таблицу.     | |||
| 6
    
        eklmn гуру 09.08.22✎ 10:58 | 
        в (3) прав     | |||
| 7
    
        dmt 09.08.22✎ 11:01 | 
        Если действовать по шаблону, то нужно убрать вложенный запрос из параметров виртуальной таблицы, убрать соединение с виртуальной таблицей.
 Но практика может показать, что разницы нет ) | |||
| 8
    
        Fedor-1971 09.08.22✎ 11:06 | 
        (0) Собери промежуточную ТЧ из
 | И Номенклатура В | (ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Владелец | ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ГДЕ | Штрихкоды.Штрихкод = &Штрихкод)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU | ПО ТоварыНаСкладахОстатки.Номенклатура = КодыТоваровSKU.Номенклатура По факту, если запрос для отчёта, то нужно смотреть на план выполнения запроса, возможно, что до какого-то объёма данных твой вариант будет оптимален | |||
| 9
    
        Маленький Вопросик 09.08.22✎ 11:09 | 
        смысл - при обработки события сканера - собирает все данные по штрихкоду. смущаем подзапрос в таблице остатков... как оптимизировать. может, сделать какой-то кеш таблицы штрихкодов и их владельцев?     | |||
| 10
    
        sitex naïve 09.08.22✎ 11:14 | 
        (9) НА самом деле или Штрихкод или остатки. В кучу кони - люди     | |||
| 11
    
        dmt 09.08.22✎ 11:15 | 
        (9) так за сколько запрос выполняется? может и смысла нет оптимизировать     | |||
| 12
    
        dmt 09.08.22✎ 11:16 | 
        (10) может это инвентаризация     | |||
| 13
    
        sitex naïve 09.08.22✎ 11:17 | 
        (12) И чего ? Может есть смысл разбить несколько.     | |||
| 14
    
        sitex naïve 09.08.22✎ 11:18 | 
        (13) +на несколько запросов*     | |||
| 15
    
        dmt 09.08.22✎ 11:20 | 
        (13) может и проблемы нет, аффтору просто заняться нечем
 но что плохого в получении ШК и остатка одним запросом - непонятно | |||
| 16
    
        mistеr 09.08.22✎ 11:24 | 
        (9) Оптимизация преждевременная или действительно медленно работает?     | |||
| 17
    
        mistеr 09.08.22✎ 11:25 | 
        (3) +1
 И Склад.Магазин = &Магазин заменить на Склад В &Склады | |||
| 18
    
        Маленький Вопросик 09.08.22✎ 11:32 | 
        (17) ну это я в курсе     | |||
| 19
    
        СеменовСемен 09.08.22✎ 11:32 | 
        а что в &ТекДата. Может таки нужно текущие остатки?     | |||
| 20
    
        СеменовСемен 09.08.22✎ 11:33 | 
        ну и сгруппировать тут лишнее     | |||
| 21
    
        Kassern 09.08.22✎ 11:53 | 
        (9) получите данные по номенклатуре по шк из регистра, поместите во временную таблицу, далее уже к ней цепляйте остальные таблицы.
 " при обработки события сканера " - так там вроде уже номенклатура передается параметром, если найдена | |||
| 22
    
        Маленький Вопросик 09.08.22✎ 15:49 | 
        (21) в типовом бпо передается ид девайса и сам штрихкод     | |||
| 23
    
        Dmitry1c 09.08.22✎ 16:27 | 
        (0) из тестового задания на собесе? :)     | |||
| 24
    
        Simod 09.08.22✎ 17:35 | 
        (0) Вирт.таблица РегистрНакопления.ТоварыНаСкладах.Остатки возвращает результат сгруппированный по выбираемым полям. У тебя это Номенклатура. Поэтому в случае нескольких SKU будут записи с одинаковым количеством. Результат запроса может быть верным только если SKU один и группировка ничего не сворачивает. Если это так, то сама группировка не нужна.     | |||
| 25
    
        Simod 09.08.22✎ 17:42 | 
        (0) Также, "ВЫБРАТЬ ПЕРВЫЕ 1" может в разное время возвращать разный результат.
 Из оптимизации тут только установка &ТекДата = Неопределено в случае когда расчет на текущее время. Также, можно Склад.Магазин = &Магазин сделать по аналогии с Номенклатура В (...). | |||
| 26
    
        Маленький Вопросик 09.08.22✎ 19:30 | 
        сам спросил - сам отвечу.
 вот так будет правильнее и значительно быстрее ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Номенклатура, | &Штрихкод КАК Штрихкод, | КодыТоваровSKU.SKU КАК SKU |ПОМЕСТИТЬ ВТ_ШтрихКодВладелец |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU | ПО Штрихкоды.Владелец = КодыТоваровSKU.Номенклатура |ГДЕ | Штрихкоды.Штрихкод = &Штрихкод | |ИНДЕКСИРОВАТЬ ПО | Штрихкоды.Владелец |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ШтрихКодВладелец.Номенклатура КАК Номенклатура, | ВТ_ШтрихКодВладелец.Штрихкод КАК Штрихкод, | ВТ_ШтрихКодВладелец.SKU КАК SKU, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ВТ_ШтрихКодВладелец КАК ВТ_ШтрихКодВладелец | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ТекДата, Склад = &Склад) КАК ТоварыНаСкладахОстатки | ПО ВТ_ШтрихКодВладелец.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура | |||
| 27
    
        RomanYS 09.08.22✎ 19:44 | 
        (26) и добавление условия на номенклатуру в параметры ВТ не дает ускорения?     | |||
| 28
    
        Маленький Вопросик 09.08.22✎ 19:47 | 
        (27) особых условий нет - хватаем первую номенклатуру по шк     | |||
| 29
    
        RomanYS 09.08.22✎ 19:50 | 
        (28) я про это и говорю. Это условие в параметрах не дает ускорения?     | |||
| 30
    
        Маленький Вопросик 09.08.22✎ 19:56 | 
        никакие дополнительные условия не дадут ускорения здесь. у меня и тут только одно условие - это входящий шк
 если я буду искать по остаткам через штрих код - я могу вообще ничего не найти - попросту не будет остатков, поэтому - привяжу остатки в конце единственное, что можно доделать в запросе - это взять SKU через максимум. но у меня в базе не более 1 SKU по товару | |||
| 31
    
        Timon1405 09.08.22✎ 20:10 | 
        так и не ответили зачем нужна именно &ТекДата, если без указания даты будет быстрее     | |||
| 32
    
        Ёпрст гуру 09.08.22✎ 20:56 | 
        (27) ускорение даст, но ТС не понимает, о чем ты его спрашиваешь, ему нужно кодом показывать     | |||
| 33
    
        Fynjy 09.08.22✎ 21:52 | 
        (32) не даст - оптимизатор запроса сам соберет верно.     | |||
| 34
    
        Fynjy 09.08.22✎ 21:54 | 
        (26) убери ВТ оно тут не нужно сделай второе левое - еще быстрее будет.     | |||
| 35
    
        RomanYS 09.08.22✎ 22:02 | 
        (32) оно у него в (0) было, только без ВТ, вряд ли он не понимает     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |