|
Какова причина сильных тормозов сия куска запроса? | ☑ | ||
---|---|---|---|---|
0
Shaman1C
16.11.16
✎
15:52
|
СотрудникиИВендоры КАК СотрудникиИВендоры
ЛЕВОЕ СОЕДИНЕНИЕ Итоговый КАК Итоговый ПО СотрудникиИВендоры.Месяц = Итоговый.Период И (СотрудникиИВендоры.Вендор = Итоговый.Номенклатура ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодительРодительРодитель) И (СотрудникиИВендоры.Проект = Итоговый.Проект ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.Родитель ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень2 ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень3 ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень4) И (СотрудникиИВендоры.Регион = Итоговый.Регион ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.Родитель ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень2 ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень3 ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень4) В таблице СотрудникиИВендоры 207433 записей, в таблице Итоговый 855914 записей. В результате этот кусок отрабатывается 50 минут. Можно ли как-то ускорить это? Буду очень благодарен. |
|||
1
Лефмихалыч
16.11.16
✎
15:52
|
ИЛИ - вот причина
|
|||
2
Лефмихалыч
16.11.16
✎
15:53
|
+(1) ну, и тьма тьмущая соединений, чтобы получить все эти черезточки
|
|||
3
Лефмихалыч
16.11.16
✎
15:53
|
а вообще запрос - лопни мои глаза, наиух...
|
|||
4
Волшебник
модератор
16.11.16
✎
15:54
|
(0) Пишется "сего куска"
|
|||
5
Shaman1C
16.11.16
✎
15:55
|
(1) это тз такое, как попросили так и сделано, так как ускорить?
|
|||
6
Жан Пердежон
16.11.16
✎
15:56
|
(4) шаманы крайнего севера могут русского и не знать
|
|||
7
Лефмихалыч
16.11.16
✎
15:56
|
(5) автора ТЗ сжечь на костре из этого же самого ТЗ
|
|||
8
Ёпрст
16.11.16
✎
15:56
|
(5) покажи весь текст запроса
|
|||
9
Лефмихалыч
16.11.16
✎
15:56
|
а потом еще минут 20 обгорелый труп пинать
|
|||
10
Shaman1C
16.11.16
✎
15:57
|
(5) зачем? он очень огромный
|
|||
11
Shaman1C
16.11.16
✎
15:57
|
(8) зачем? он очень огромный
|
|||
12
igork1966
16.11.16
✎
15:58
|
(10)(11) Мазохисты
|
|||
13
Ёпрст
16.11.16
✎
15:58
|
(10) у тебя не только в этом левом соединении все тормоза, так-то
|
|||
14
Shaman1C
16.11.16
✎
15:58
|
(6) с русским проблема у Лефмихалыч, ибо не отвечает на вопрос, зато мощно флудит )
|
|||
15
Shaman1C
16.11.16
✎
16:00
|
(13) Я тщательно каждый пакет и таблицу проанализировал, все выполняется в секунды, только тут запара.
|
|||
16
Про100Филя
16.11.16
✎
16:00
|
Мои глаза... Может стоит поиграться с оператором "в иерархии"?
|
|||
17
Shaman1C
16.11.16
✎
16:02
|
(16) это она и есть
|
|||
18
BeerHelpsMeWin
16.11.16
✎
16:02
|
Проект и Вендор - составные типы?
|
|||
19
DailyLookingOnA Sunse
16.11.16
✎
16:02
|
СотрудникиИВендоры.Проект = Итоговый.Проект
и СотрудникиИВендоры.Регион = Итоговый.Регион но, СотрудникиИВендоры.Вендор = Итоговый.Номенклатура упал под стол |
|||
20
BeerHelpsMeWin
16.11.16
✎
16:03
|
(7) а разжигать распечаткой этого самого запроса
|
|||
21
Ёпрст
16.11.16
✎
16:03
|
и вот тут,
ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодитель ты просто точки забыл ? |
|||
22
Про100Филя
16.11.16
✎
16:03
|
(16) а по хорошему, стереть и заново написать с временными таблицами и хорошенько продумать что с чем соединять.
|
|||
23
Про100Филя
16.11.16
✎
16:04
|
(17) Прости не вижу в запросе который в (0)
|
|||
24
Shaman1C
16.11.16
✎
16:05
|
(21) что и вот тут? нету там точек
|
|||
25
Skylark
16.11.16
✎
16:06
|
Какая интересная жизнь у людей...
Из Итоговый сделать выборки ОбъединитьВсе и из них ВыбратьРазличные и вот с этим уже джойнить |
|||
26
BeerHelpsMeWin
16.11.16
✎
16:06
|
(15) если хочешь в лоб и лень переделывать - удали по очереди каждый из этих трех куска "И (....)" и посмотри на результат
|
|||
27
Shaman1C
16.11.16
✎
16:06
|
(18) нет
|
|||
28
KrasnSergey
16.11.16
✎
16:06
|
(10)+100
|
|||
29
BeerHelpsMeWin
16.11.16
✎
16:06
|
(25) зачем же вот так сразу интригу убивать :(
|
|||
30
Shaman1C
16.11.16
✎
16:07
|
(25) тебя лишь наименование виртуальной таблицы смутило... печаль беда...
|
|||
31
Shaman1C
16.11.16
✎
16:07
|
(26) делал, и что? )
|
|||
32
Ёпрст
16.11.16
✎
16:08
|
(24) т.е ты в табличке итоговый уже получил поля
НоменклатураРодитель НоменклатураРодительРодитель ... НоменклатураРодитель...........Родитель ? ? |
|||
33
Shaman1C
16.11.16
✎
16:09
|
(19) видимо каждый раз стукаешься головой )
|
|||
34
BeerHelpsMeWin
16.11.16
✎
16:10
|
(31) ну тогда для начала смотри (25)
|
|||
35
Shaman1C
16.11.16
✎
16:10
|
(32) просто поле с таким наименованием вот и все.
это как с девушкой: она - у меня комп тормозит, помоги. я - у тебя какой комп? она - ну такой розовенький! блин, название та тут причем? тут в другом дело, в том чт отормозит |
|||
36
Ёпрст
16.11.16
✎
16:10
|
если че, получи там же и вот это
Итоговый.Проект.Родитель Итоговый.Проект.Родитель.....Родитель и для Итоговый.Регион.Родитель аналогично. всё будет быстрее. |
|||
37
Ёпрст
16.11.16
✎
16:11
|
(35) че значит, просто поле ?
Покажи весь код своего шедевра. |
|||
38
DailyLookingOnA Sunse
16.11.16
✎
16:11
|
(33)
Шаман без бубна - самозванец. P.S. Если мне на работе кто скажет, что я косячу время от времени, буду эту ветку показывать. |
|||
39
Shaman1C
16.11.16
✎
16:11
|
(36) нет, в это все отлично!! в (25) вроде дело пишут, щас попробую
|
|||
40
Skylark
16.11.16
✎
16:12
|
Зато прикиньте, какой эффект будет! Запрос выполнялся 50 минут, а тут раз и выполнился. ТС сразу вручат премию ["седло большое, ковер и телевизор"]
|
|||
41
Shaman1C
16.11.16
✎
16:13
|
(38) ты вместо своих ошибок приводишь в пример других людей?
а вот у Петровых дочь уже работает, а ты бездельник дома сидишь! |
|||
42
Про100Филя
16.11.16
✎
16:15
|
Попробуй так
СотрудникиИВендоры КАК СотрудникиИВендоры ЛЕВОЕ СОЕДИНЕНИЕ Итоговый КАК Итоговый ПО СотрудникиИВендоры.Месяц = Итоговый.Период И (СотрудникиИВендоры.Вендор = Итоговый.Номенклатура ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодительРодитель ИЛИ СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодительРодительРодительРодительРодитель) И (СотрудникиИВендоры.Проект = Итоговый.Проект ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.Родитель ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень2 ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень3 ИЛИ СотрудникиИВендоры.Проект = Итоговый.Проект.РодительУровень4) И (СотрудникиИВендоры.Регион = Итоговый.Регион ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.Родитель ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень2 ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень3 ИЛИ СотрудникиИВендоры.Регион = Итоговый.Регион.РодительУровень4) И Итоговый.НоменклатураРодитель ЕСТЬ НЕ NULL И Итоговый.НоменклатураРодительРодитель ЕСТЬ НЕ NULL И Итоговый.НоменклатураРодительРодительРодитель ЕСТЬ НЕ NULL И Итоговый.НоменклатураРодительРодительРодительРодитель ЕСТЬ НЕ NULL И Итоговый.НоменклатураРодительРодительРодительРодительРодитель ЕСТЬ НЕ NULL И Итоговый.Проект.Родитель ЕСТЬ НЕ NULL И Итоговый.Проект.РодительУровень2 ЕСТЬ НЕ NULL И Итоговый.Проект.РодительУровень3 ЕСТЬ НЕ NULL И Итоговый.Проект.РодительУровень4 ЕСТЬ НЕ NULL И Итоговый.Регион.Родитель ЕСТЬ НЕ NULL И Итоговый.Регион.РодительУровень2 ЕСТЬ НЕ NULL И Итоговый.Регион.РодительУровень3 ЕСТЬ НЕ NULL И Итоговый.Регион.РодительУровень4 ЕСТЬ НЕ NULL |
|||
43
АнтонБ
16.11.16
✎
16:19
|
(42)
"В Иерархии" Не использует по политическим соображениям? |
|||
44
Skylark
16.11.16
✎
16:20
|
(42) Ты его брат что ли?
|
|||
45
DailyLookingOnA Sunse
16.11.16
✎
16:21
|
(41)
Ну тыж программист. Я вот думал в консультанты податься, несколько бумажек по ERP получил. И попал снова в программисты, сиди и кодь. Еще даже не все вакансии, куда я ходил, на HH закрылись. Выбирай - не хочу. |
|||
46
AceVi
16.11.16
✎
16:21
|
(41) Он имеет ввиду - что он еще лапушка и если его уволят то с улицы придет такой как шаман, и с ним они лиха отпляшут джигу)
Запрос ужасный каждая точка это левое соединение - ты соединяешь кучи таблиц и в итоге у тебя читается записей в 4 раза больше - вот и тормозит. ты запросы строить не умеешь. |
|||
47
Вафель
16.11.16
✎
16:24
|
тут лучше делать замыкание
|
|||
48
Вафель
16.11.16
✎
16:28
|
||||
49
Про100Филя
16.11.16
✎
16:33
|
(43) В соединении нельзя, имелось в виду переписать запрос с ВТ и в где использовать.
(44) ОП спрашивал почему тормозит, решил подтолкнуть к размышлениям. Может ему вообще за количество строк платят. |
|||
50
Shaman1C
16.11.16
✎
16:35
|
(46) не я писал код, но мне надо разобраться и оптимизироваться
|
|||
51
Ёпрст
16.11.16
✎
16:38
|
(50) избавься от точек в левом соединении и от "ИЛИ".
|
|||
52
Ёпрст
16.11.16
✎
16:39
|
Хотя, там по-ходу, надо весь текст запроса переписывать
|
|||
53
Gantosha
16.11.16
✎
16:41
|
тяжело вам там..
|
|||
54
gero
16.11.16
✎
16:41
|
(39)
Через "ОБЪЕДИНИТЬ" вместо "ИЛИ" сделал? |
|||
55
Shaman1C
16.11.16
✎
16:42
|
(51) точки где проект и регион убрал, стало на пару минут быстрее )) где номенклатура точек нет
|
|||
56
Ёпрст
16.11.16
✎
16:43
|
(55) молодец. Теперь убирай или
|
|||
57
Shaman1C
16.11.16
✎
16:45
|
(54) вот пытаюсь сделать, пока сложно понять как.
ВЫБРАТЬ Итоговый.Ответственный, Итоговый.Маржа, Итоговый.Проект, Итоговый.Подразделение, Итоговый.Регион, Итоговый.Период, Итоговый.Номенклатура, Итоговый.Вид, Итоговый.SSПоЖелезу, Итоговый.ЗаказПокупателя, Итоговый.СтоНаСто, Итоговый.МаржаСправочно, Итоговый.ОплатаСправочно, Итоговый.ПроектРодитель, Итоговый.ПроектРодительУровень2, Итоговый.ПроектРодительУровень3, Итоговый.ПроектРодительУровень4, Итоговый.РегионРодитель, Итоговый.РегионРодительУровень2, Итоговый.РегионРодительУровень3, Итоговый.РегионРодительУровень4 ПОМЕСТИТЬ Итоговый2 ИЗ Итоговый КАК Итоговый ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Итоговый.Ответственный, Итоговый.Маржа, Итоговый.Проект, Итоговый.Подразделение, Итоговый.Регион, Итоговый.Период, Итоговый.НоменклатураРодитель, Итоговый.Вид, Итоговый.SSПоЖелезу, Итоговый.ЗаказПокупателя, Итоговый.СтоНаСто, Итоговый.МаржаСправочно, Итоговый.ОплатаСправочно, Итоговый.ПроектРодитель, Итоговый.ПроектРодительУровень2, Итоговый.ПроектРодительУровень3, Итоговый.ПроектРодительУровень4, Итоговый.РегионРодитель, Итоговый.РегионРодительУровень2, Итоговый.РегионРодительУровень3, Итоговый.РегионРодительУровень4 ИЗ Итоговый КАК Итоговый ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Итоговый.Ответственный, Итоговый.Маржа, Итоговый.Проект, Итоговый.Подразделение, Итоговый.Регион, Итоговый.Период, Итоговый.НоменклатураРодительРодитель, Итоговый.Вид, Итоговый.SSПоЖелезу, Итоговый.ЗаказПокупателя, Итоговый.СтоНаСто, Итоговый.МаржаСправочно, Итоговый.ОплатаСправочно, Итоговый.ПроектРодитель, Итоговый.ПроектРодительУровень2, Итоговый.ПроектРодительУровень3, Итоговый.ПроектРодительУровень4, Итоговый.РегионРодитель, Итоговый.РегионРодительУровень2, Итоговый.РегионРодительУровень3, Итоговый.РегионРодительУровень4 ИЗ Итоговый КАК Итоговый тут я только номенклатуру делаю (избавляюсь от ИЛИ), но не особо та и прокатывает, по времени стало даже больше, потом указал проект и регион также, по времени ничо не поменялось. Эта таблицу потом соединял с СотрудникиИВендоры |
|||
58
Shaman1C
16.11.16
✎
16:46
|
У проекта и региона по 5 родителей, а у номенклатура по 6 родителей (уровней вложения) вот это тоже пока непонятный момент, примеров я не видел, если у когото есть, буду благодарен, самому наощуп очень долго
|
|||
59
Skylark
16.11.16
✎
16:47
|
А Итоговый как заполняется?
|
|||
60
gero
16.11.16
✎
16:48
|
(57)
Может лучше так: ВЫБРАТЬ СотрудникиИВендоры КАК СотрудникиИВендоры ЛЕВОЕ СОЕДИНЕНИЕ Итоговый КАК Итоговый ПО СотрудникиИВендоры.Месяц = Итоговый.Период И СотрудникиИВендоры.Вендор = Итоговый.Номенклатура ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ СотрудникиИВендоры КАК СотрудникиИВендоры ЛЕВОЕ СОЕДИНЕНИЕ Итоговый КАК Итоговый ПО СотрудникиИВендоры.Месяц = Итоговый.Период И СотрудникиИВендоры.Вендор = Итоговый.НоменклатураРодитель ... |
|||
61
Shaman1C
16.11.16
✎
16:48
|
(59) выборка с регистров
|
|||
62
Shaman1C
16.11.16
✎
16:50
|
(60) а проект и регион как должны выглядеть? в первом объединении: СотрудникиИВендоры.Регион = Итоговый.Регион
во втором: СотрудникиИВендоры.РегионРодитель = Итоговый.РегионРодитель так чтоли? |
|||
63
Skylark
16.11.16
✎
16:50
|
(61) А нельзя его сразу заполнить так чтобы потом не нужно было транспонировать объединениями?
|
|||
64
Salimbek
16.11.16
✎
16:51
|
(60) Плюсую. И все это поместить в ВТ с ИД-полем из Итоговый.
Потом так же пройтись по Проектам и третью ВТ по Регионам. Потом все эти три ВТ-шки соединяешь по ИД |
|||
65
Gantosha
16.11.16
✎
16:51
|
нужно что-нибудь подумать о том почему такая ненормальная форма. Что там на этих уровнях иерархии такое ,что приходится такие дикие условия делать.
|
|||
66
gero
16.11.16
✎
16:53
|
(62)
типа да, но зачем СотрудникиИВендоры.Регион{Родитель} = Итоговый.РегионРодитель {Родитель}-? ведь в (0) у Региона нет родителя? |
|||
67
Shaman1C
16.11.16
✎
16:54
|
(63) это ничего не изменит, итоговая это и есть выборка с реисгтров фактически, просто в виде виртуальной сгруппированной
|
|||
68
gero
16.11.16
✎
16:55
|
(60)+
Подумалось, что лучше наверное для каждого уровня Иерархии Номенклатуры сделать свою временную таблицу :) И уже готовые ВТ объединять |
|||
69
Gantosha
16.11.16
✎
16:58
|
объясните мне недалекому как в одной таблице в поле оказались регионы всех уровней , а в другой они относятся к разным уровням.
Я просто пример придумать не могу ) Например что значит запись Федеральный округ = Город или Город = Улица например. Откуда такая ненормальность. |
|||
70
Shaman1C
16.11.16
✎
16:58
|
(60) сделал, только стало не особо быстрее, но сумма стала не верная...
|
|||
71
Lys
16.11.16
✎
16:59
|
Начинать надо с пересмотра структуры метаданных.
Архитектура, при которой в полях Вендор, Проект и Регион могут храниться одновременно и элементы, и группы произвольного уровня, ущербна по определению. А уже следствием ущербной архитектуры являются ущербные запросы... |
|||
72
Skylark
16.11.16
✎
17:01
|
ВЫБРАТЬ
Итоговый.Ответственный, ... Итоговый.ПроектРодительУровень1 КАК Проект, ... ИЗ Итоговый КАК Итоговый ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Итоговый.Ответственный, ... Итоговый.ПроектРодительУровень2 КАК Проект, ... ИЗ Итоговый КАК Итоговый ПОМЕСТИТЬ ВТИтоговыйПроекты ВЫБРАТЬ РАЗЛИЧНЫЕ ВТИтоговыйПроекты.* ИЗ ВТИтоговыйПроектыКАК ВТИтоговыйПроекты ПОМЕСТИТЬ ВТИтоговыйПроектыРазличные СотрудникиИВендоры КАК СотрудникиИВендоры ЛЕВОЕ СОЕДИНЕНИЕ ВТИтоговыйПроектыРазличные КАК Итоговый ПО СотрудникиИВендоры.Проект = Итоговый.Период И (СотрудникиИВендоры.Вендор = Итоговый.Проект) |
|||
73
Вафель
16.11.16
✎
17:04
|
(71) Так называемые "регистры правил" вполне нормальный паттерн
|
|||
74
Shaman1C
16.11.16
✎
17:08
|
ПО СотрудникиИВендоры.Проект = Итоговый.Проект
И (СотрудникиИВендоры.Вендор = Итоговый.Номенклатура) Может так? |
|||
75
Gantosha
16.11.16
✎
17:11
|
думать, чего тут думать ..трясти надо.
|
|||
76
gero
16.11.16
✎
17:12
|
(70)
а (68) осилишь или уже пас :) |
|||
77
Skylark
16.11.16
✎
17:13
|
(74) в (72) это только кусок
Что и как ты объединяешь в (57)??? Суть в том чтобы поля с уровнями привести к одному полю. Т.е. вместо строки Вася, Вася1, Вася2 получить строки Вася Вася1 Вася2 и так во всех таблицах И тогда не надо будет ИЛИ в запросе по количеству уровней, а будет одно = |
|||
78
Shaman1C
16.11.16
✎
17:16
|
(72) скорость почти не меняется, да и сумма не верная становится.
в запросе не одно, а три поля по котором идет сравнение: проект - 5 уровней родителя, регион - 5 уровней родителя, номенклатура - внимание!!! 6 уровней!!!! если сделать 6 объединения, то непонятно: 1. как в 6ом объединять, т.к. уровни разные. 2. регион может быть уровня 3, проект уровня 2, номенклатура уровня 6 => не прокатит этот вариант. |
|||
79
Shaman1C
16.11.16
✎
17:17
|
(77) тогда судя по логике надо 150 объеденений делать...
|
|||
80
Skylark
16.11.16
✎
17:25
|
(79) Будет 3 группы объединений 5+5+6.
В результате вместо 855914 записей будет 855914 * 16 записей, но зато можно будет делать соединение без ИЛИ и это имеет шансы быть быстрее. Каждая строка Итоговый преобразуется в 5 (или 6) строк - идентичных, различающихся только ключевым полем. |
|||
81
ТупойЖадный
16.11.16
✎
17:34
|
(0) Здравствуй, брат!
|
|||
82
Shaman1C
16.11.16
✎
17:45
|
(80) теость мы три таблицы (5+5+6) по отдельности соединяем с СотрудникиИВендоры, каждая по своему полю, 5 по регион, 5 по проект, 5 по номенклатура и все это через Объеденить все ?
|
|||
83
Demiurg
16.11.16
✎
17:48
|
||||
84
Skylark
16.11.16
✎
17:49
|
(82) Нет, мы каждую из трех таблицы через ОБЪЕДИНИТЬ ВСЕ соединяем саму с собой оставляя из 5 (или 6) полей одно - из 5+5+6 полей для соединения останется только 3.
А потом получившееся соединяем с СотрудникиИВендоры. |
|||
85
MadJhey
16.11.16
✎
18:44
|
"или", через две "." в условии соединения.
НоменклатураРодительРодительРодительРодительРодитель - феерия. Запрос года. :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |