|
Есть у кого идеи по оптимизации запроса? | ☑ | ||
---|---|---|---|---|
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) было, только без ВТ, вряд ли он не понимает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |