Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Exists по двум или более таблицам  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 253
Симонов Денис,

Чуть исправил, в exists вместо on поставил where. План:
автор
План
PLAN (C INDEX (DEFECT_IDX1))
PLAN JOIN (B NATURAL, A INDEX (PK_MODUL))

Может как-то не через select?
15 сен 17, 12:12    [20798404]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
Кстати, какие объёмы данных (сейчас и ожидаемые) ?

Posted via ActualForum NNTP Server 1.5

15 сен 17, 12:12    [20798405]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7287
KreatorXXI,

ошибся мальца.
На план не смотри если не понимаешь скорость по сравнению с другими вариантами устраивает?
15 сен 17, 12:16    [20798416]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7287
KreatorXXI,

тьфу. Этот запрос тоже не правильный. Короче либо вариант с DISTINCT либо изначальный EXISTS
15 сен 17, 12:18    [20798427]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
Симонов Денис> скорость по сравнению с другими вариантами устраивает?

Так он и скорость щас оценить не может, если у него
самая большая (в будущем) таблица пока пустая.
Надо на количество фетчей смотреть, если он умеет.

P.S. Нет никаких вариантов без DISTINCTа, равносильных
первоначальному по результату - ни рабоче-крестьянских,
ни дворянско-аристократических.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 12:32    [20798482]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7287
Гаджимурадов Рустам,

есть, но я сомневаюсь что они будут лучше
15 сен 17, 12:34    [20798491]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
Симонов Денис> есть

?

Posted via ActualForum NNTP Server 1.5

15 сен 17, 12:51    [20798544]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
А, ты про всякие переборы вручную. Несерьёзно.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 12:51    [20798547]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1498
Симонов Денис
Гаджимурадов Рустам,

есть, но я сомневаюсь что они будут лучше
Count(), HEAVING ?
15 сен 17, 12:53    [20798552]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
HEAVING звучит замечательно, но это тот же
дистинкт, только в профиль. И ничем не лучше.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 12:58    [20798568]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 253
Гаджимурадов Рустам
P.S. Нет никаких вариантов без DISTINCTа, равносильных
первоначальному по результату - ни рабоче-крестьянских,
ни дворянско-аристократических.

Ну как нет? Попробуйте мне объяснить. Есть таблица modul, у каждой записи таблицы modul может быть до 30 дочерних записей в umass. У каждой записи umass может быть до 100 записей в defect. В modul записей почти миллион, в umass хорошо за два миллиона, в дефект пока чуть меньше ста тысяч. Мне нужны записи в modul, где есть дочерние записи в defect. Записи в таблице defect более-менее равномерно размазаны по umass. Т.е. по моей человеческой логике вероятность нарваться на запись в defect велика, и сканирование по umass большого числа записей не должно быть. Вот как мне получить результат? Вообще мне кажется и схема данных нормальная, и хотелка тоже нужная.
Я вообще хотел ещё верхний уровень приклеить. Но пока нет.
15 сен 17, 13:00    [20798578]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7287
Гаджимурадов Рустам,

ну например

with t as (
  select b.id_mdl
  from umass b
    join defect c on c.id_ums=b.id_ums
  group by b.id_mdl
)
select a.sn_mdl
from modul a
left join t on t.id_mdl = a.id_mdl
where t.id_mdl is not null
15 сен 17, 13:04    [20798602]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1498
KreatorXXI, можно пойти от обратного - если записи в defect существуют только для modul через umass, то тебе надо лишь выбрать из defect единичные (DISTINCT) id_ums и по натуралу привязать к выборке сначала umass, а затем modul.
Как-то так:
SELECT m.id_mdl
  FROM (SELECT DISTINCT id_ums FROM defect) d
    INNER JOIN umass um ON um.id_ums = d.id_ums
    INNER JOIN modul m ON m.id_mdl = um.id_mdl
  PLAN JOIN(JOIN(JOIN(d NATURAL), um INDEX(pk_umass)), m INDEX(pk_modul))
Попробуй, вдруг повезет! :)
15 сен 17, 13:37    [20798714]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
KreatorXXI> в дефект пока чуть меньше ста тысяч

А будет сколько и когда?
Сколько из modul должно выбраться в итоге (в процентах)?
И какие есть (если есть) доп.фильтры по каждой из таблиц.

Из того, что ты пока рассказал - оставь изначальный вариант.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 13:40    [20798725]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
Симонов Денис> group by b.id_mdl

Я ж говорю, профиль Фаберже.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 13:41    [20798729]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 12827
KreatorXXI
План
PLAN (C INDEX (DEFECT_IDX1))
PLAN JOIN (B NATURAL, A INDEX (PK_MODUL))

Может как-то не через select?

При соотношении modul и umass 1:3 вполне нормальный вариант.
Или всё же планируешь до 1:20 довести?
15 сен 17, 13:41    [20798733]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
rdb_dev> Iiigiaoe, aagoa iiaacao! :)

Замечательный подход к разработке.
Ламером был - ламером и помрёшь.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 13:42    [20798736]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
WildSery> При соотношении modul и umass 1:3 вполне нормальный вариант.
> Или всё же планируешь до 1:20 довести?

Там 1-30-100. Не вариант справа налево.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 13:43    [20798742]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 12827
rdb_dev
Попробуй, вдруг повезет! :)
Хороший совет, собирать дистинкт по всей таблице с планируемым объёмом более 100 миллионов записей.
15 сен 17, 13:43    [20798743]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 208
KreatorXXI
Гаджимурадов Рустам
P.S. Нет никаких вариантов без DISTINCTа, равносильных
первоначальному по результату - ни рабоче-крестьянских,
ни дворянско-аристократических.

Ну как нет? Попробуйте мне объяснить. Есть таблица modul, у каждой записи таблицы modul может быть до 30 дочерних записей в umass. У каждой записи umass может быть до 100 записей в defect. В modul записей почти миллион, в umass хорошо за два миллиона, в дефект пока чуть меньше ста тысяч. Мне нужны записи в modul, где есть дочерние записи в defect. Записи в таблице defect более-менее равномерно размазаны по umass. Т.е. по моей человеческой логике вероятность нарваться на запись в defect велика, и сканирование по umass большого числа записей не должно быть. Вот как мне получить результат? Вообще мне кажется и схема данных нормальная, и хотелка тоже нужная.
Я вообще хотел ещё верхний уровень приклеить. Но пока нет.


Ну так разверни джойн при помощи заклинаний +0 так, чтобы перебор начинался с дефектов. Но когда/если их таблица распухнет до безобразия, это встанет колом.
15 сен 17, 13:43    [20798747]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 12827
Гаджимурадов Рустам
Там 1-30-100. Не вариант справа налево.
Рустам, пусть автор ответит.
Это максимально плохое соотношение. Но пока из его речи следует, что только таблица дефектов не наполнена, остальные, значит, в более-менее рабочем состоянии, и текущее соотношение 1:3
15 сен 17, 13:45    [20798752]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
WildSery> и текущее соотношение 1:3

Гм... Ты предлагаешь переписывать запрос позже или что?

P.S. Повторюсь в третий раз - надо танцевать от доп.фильтров.
Наверняка они есть, не может быть регулярная выборка ляма
записей мастера с мульти-лямами деталей без доп.фильтров.

Posted via ActualForum NNTP Server 1.5

15 сен 17, 13:51    [20798778]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1498
Гаджимурадов Рустам
rdb_dev> Iiigiaoe, aagoa iiaacao! :)

Замечательный подход к разработке.
Ламером был - ламером и помрёшь.
И это вещает человек, не знакомый с теорией множеств и откуда взялся JOIN в SQL?
15 сен 17, 14:00    [20798824]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1498
WildSery
rdb_dev
Попробуй, вдруг повезет! :)
Хороший совет, собирать дистинкт по всей таблице с планируемым объёмом более 100 миллионов записей.
Хочешь сказать, что DISTINCT не способен к отбору по индексу, в частности по FK к umass?
15 сен 17, 14:03    [20798844]     Ответить | Цитировать Сообщить модератору
 Re: Exists по двум или более таблицам  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57325
rdb_dev> Хочешь сказать, что DISTINCT не способен к отбору по индексу

Это какой-то феерический песец...

Posted via ActualForum NNTP Server 1.5

15 сен 17, 14:09    [20798875]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить