|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Связка мастер - деталь. В базе существуют мастера, у которых нет ни одной записи о деталях. Как быстрее всего выбрать такие записи? Связка идет по первичному ключу + внешнему. FB 2.0 и выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 23:29 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
where not exists - единственный способ. Для дальнейшего ускорения надо менять структуру БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 23:34 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaon, LEFT JOIN, NOT EXISTS ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 23:35 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да, спасибо. перебором только получается, так и думал. причем не получается :) посмотрите, плиз, на запрос, что не так делаю: Код: sql 1.
связка идёт по полю series_uid, как понятно из запроса. не выбирается ни одна запись, хотя точно существует одна запись серий без изображений. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2016, 23:49 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaonсвязка идёт по полю series_uid Не вижу в каком месте у тебя "связь идёт". Ткни пальцем на букву. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 00:02 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, в базе ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 00:09 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaonсвязка идёт по полю series_uid, как понятно из запроса. где это видно и понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 00:28 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdv, могу структуру таблиц частично выложить. там простая связь по указанным полям PK > FK. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 00:39 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaon, связи между таблицами может вообще не быть. И на запросы эта связь вообще никак не влияет. вопрос Дениса Симонова был про запрос. Вам надо писать select ... from master m left join details d on m.id = d.m_id where d.m_id is null http://www.ibase.ru/joins/ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 00:56 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaonв базе А рация - на бронепоезде, ага... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 01:07 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdv, спасибо, получилось ) Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 01:18 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
makhaon, классический вариант такой: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 10:26 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
KreatorXXI, не знаю, почему он классический. Для меня классический - мой вариант, с left join. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 11:52 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdvне знаю, почему он классический. Для меня классический - мой вариант, с left join. Вы разных классиков читаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 11:55 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdv, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 11:57 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Я имел ввиду классический при использовании EXISTS. Кстати, при использовании left join в таком запросе не нарвёмся на сканирование всей таблицы деталей? Нарвёмся. И совсем это ни к чему. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 12:54 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
KreatorXXIнарвёмся на сканирование всей таблицы деталей? Нарвёмся. И совсем это ни к чему. нарвемся на сканирование всей таблицы мастера. а куда деваться? такие запросы мне приходилось писать, когда попадались битые базы с потерянными данными в справочниках. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:10 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
KreatorXXIКстати, при использовании left join в таком запросе не нарвёмся на сканирование всей таблицы деталей? НарвёмсяУверен ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:18 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdvДля меня классический - мой вариант, с left join. Вот только при наличии большой толпы деталей к каждому мастеру, не будет ли он тормозить, сначала выбирая каждую деталь, а только потом проверяя поле на NULL? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:34 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovсначала выбирая каждую деталь эээ, шо? a left join b - в a будут выбраны все записи, из b будут выбраны записи по индексу. сколько там и чего будет выбрано - абсолютно пофиг, ибо результат важнее скорости. А насчет exists - оно что, будет быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:55 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
kdvА насчет exists - оно что, будет быстрее? По идее - да, поскольку остановится на первой найденной детали и даже не будет её распаковывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 13:58 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Я подтверждаю (иначе писать не стал бы). При left join вся таблица деталей "фетчится". И представьте. у Вас 100 мастеров, а 50-ти выдавали детали по нескольку штук каждый рабочий день. И в запросе за год будет какое-то сумасшедшее время выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 14:08 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПо идее - да Помнится у меня join работал быстрее, хотя я ожидал быстрого exists.... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 15:50 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Если не ошибаюсь. exist => nested loops (без вариантов) join => join по индексу (если он конечно есть) Имхо, немного разные алгоритмы. Join должен работать быстрее в большинстве случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 16:38 |
|
Как быстро выбрать всех мастеров, у которых нет деталей?
|
|||
---|---|---|---|
#18+
Romanzekexist => nested loops (без вариантов) join => join по индексу (если он конечно есть) И?.. "Join по индексу" может выполняться как-то кроме nested loop с учётом его outer-ности? Вы там в RB научили его использовать merge?.. Стандартный птиц не умеет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2016, 16:43 |
|
|
start [/forum/topic.php?fid=40&fpage=50&tid=1561777]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 167ms |
0 / 0 |