|
ВНУТРЕ-ВНУТРЕННЕЕ перевысоединение без ВТ - рабочий вариант? | ☑ | ||
---|---|---|---|---|
0
bolobol
08.11.22
✎
17:36
|
День добрый!
Надо отобрать из ВТ_Комплекты (спр.Комплект состоит из Номенклатур, хранящихся в спр.Комплект.ТЧ) только те, что содержат Номенклатуру с нужными значениями свойства У некоторой Номенклатуры есть в рсв.ЗначенияСвойств нужное Значение свойства, нужные значения перечислены в ВТ_Значения. Рабочий ли вариант такого отбора (синтаксис упрощён): ВЫБРАТЬ РАЗЛИЧНЫЕ // получаем составы комплектов, убирая дублирующуюся до семи раз Номенклатуру в Комплекте Комплект, Номенклатура ПОМЕСТИТЬ ВТ_КомплектНоменклатура ИЗ ВТ_Комплекты ВНУТРЕННЕЕ спр.Комплекты.Номенклатура ПО ВТ_Комплекты.Комплект = спрКомплектыНоменклатура.Ссылка ИНДЕКСИРОВАТЬ ПО Комплект, Номенклатура ; ВЫБРАТЬ ВТ_Комплект.* ПОМЕСТИТЬ ВТ_КомплектыОтбор ИЗ ВТ_КомплектНоменклатура ВНУТРЕННЕЕ рсв.ЗначенияСвойств ПО Свойство = &НужноеСвойство И ВТ_КомплектНоменклатура.Номенклатура = рсвЗначенияСвойств.Номенклатура ВНУТРЕННЕЕ ВТ_Значения ПО рсвЗначенияСвойств.Значение = ВТ_ЗначенияЗначение ВНУТРЕННЕЕ ВТ_Комплекты ПО ВТ_КомплектНоменклатура.Комплект = ВТ_Комплекты.Комплект Работает быстро, строк в таблицах от 250к до млн. Имеет ли смысл делать ВТ на каждый шаг, и выражать рсв.ЗначенияСвойств.Объект КАК Номенклатура, с индексированием каждой ВТ? |
|||
1
Сергиус
08.11.22
✎
17:57
|
(0)А если проверить?)
|
|||
2
дущ1
08.11.22
✎
18:05
|
(0) честно говоря, лень вникать. Но если нужна скорость, то все по кускам в кучу ВТ с индексированием, а потом скрещивать, если приоритет на занимаемую оперативную память, то можно и так как сейчас. Хотя я бы даже просто для читаемости кода сделал все таки последовательно. Вначале собрал все в ВТ, а потом их скрещивал попарно.
|
|||
3
nicxxx
08.11.22
✎
22:57
|
работает быстро, потому что для современного железа это совсем не bigdata)) я бы так оставил. запрос и так не длинный и вполне читабельный. а на создание врем таблиц еще время будет тратиться и ресурс HDD/SSD
|
|||
4
rudnitskij
09.11.22
✎
00:15
|
(0) вы из ВТ_Комплекты получаете данные, помещаете их в таблицу, чтобы эту таблицу потом опять внутренне соединить с ВТ_Комплекты? Не понимаю нахрена это надо
ЗЫ. Не забывайте потом уничтожать временные таблицы |
|||
5
bolobol
09.11.22
✎
13:26
|
(4) ВТ_Комплекты - большая, дублирование упоминаний комплектов помноженное на номенклатуру - там будут сотни миллионов записей, которые потом сворачивать, поэтому - краткая ВТ создаётся, а по ней отбор из ВТ_Комплекты в конце
|
|||
6
rudnitskij
09.11.22
✎
15:42
|
(5) если у вас "ВЫБРАТЬ РАЗЛИЧНЫЕ" - то всё уже там свернуто
|
|||
7
bolobol
09.11.22
✎
15:43
|
(6) Ага, конечно. Выборка сворачивает исходную таблицу?
|
|||
8
rudnitskij
09.11.22
✎
18:45
|
(7) если у вас нет числовых колонок - то слово РАЗЛИЧНЫЕ всё свернет. Если числовые есть - надо по ним делать суммирование и группировку по нечисловым, тогда РАЗЛИЧНЫЕ не надо.
А от того, что вы из большой таблицы выбрали данные в маленькую, а потом внутренним соединением соединяете опять с той же большой, никакого сворачивания не произойдет |
|||
9
bolobol
09.11.22
✎
19:03
|
(8) какая дичь... Выборка на то и предназначена, чтобы выбрать только то что необходимо, как тут - из большого объёма сделать маленький, необходимый, а затем, когда данные стали ещё меньше - оставить в большой таблице искомый маленький набор
|
|||
10
rudnitskij
09.11.22
✎
22:44
|
(9) какая дичь... соединение с одной и той же таблицей никак отбор не уменьшает. А отборы из второго запроса можно сразу наложить на первый.
Хотя если у вас талант писателя - пишите конечно, кто ж запретит |
|||
11
bolobol
10.11.22
✎
14:41
|
(10) Вы проверяли то что советуете? Ведь это прямо противоречит рекомендациям. Более того, соединение по неиндексированным полям - это вообще не дождаться результатов будет, не говоря про то, что памяти не хватит
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |