powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование одного join'а два раза в одном плане
8 сообщений из 8, страница 1 из 1
Использование одного join'а два раза в одном плане
    #39308208
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю с таким запросом:

Код: plsql
1.
SELECT * FROM t2 JOIN Purchase_UserInvoiceDetail p ON t2.k0=p.Purchase_sku_userInvoiceDetail JOIN Stock_skuLedger l ON t2.k1=l.stock_sku_dataskuledger WHERE p.purchase_price_userinvoicedetail=l.stock_costed_dataskuledger



Таблицы Purchase_UserInvoiceDetail (p), и Stock_skuLedger (l) очень большие по несколько десятков миллионов записей. t2 наоборот содержит 400 записей.

В этом запросе получается своего рода ромб:

То есть p и l по сути фильтруются по связи с таблицей t2 (причем по всем этим связям есть индексы) и по равенству двух полей. Самым быстрым способом выполнения будет:

а) отфильтровать p по связи с таблицей t2.
б) отфильтровать l по связи с таблицей t2.
в) соединить результаты merge join'ом по равенству полей.

Если же быть еще точнее, то самым быстрым способом будет сгруппировать t2 по k0 и отфильтровать по этим разновидностям p, сгруппировать t2 по k1 и отфильтровать по этим разновидностям l, после чего hash join'ить один из результатов с t2, и merge join'ить оба эти результата (по сути получается predicate push down предиката t2, но не в подзапрос, а своего рода в таблицы p и l, как если бы они сами были подзапросами SELECT * FROM таблица).

Соответственно два вопроса:

а) Умеет ли оракл два раза использовать одну таблицу два раза в плане
б) Умеет ли оракл "проталкивать предикат в таблицу"

Понятно что первое и второе "лечится". То есть в первом случае можно добавить self-join t2. Во втором сделать predicate push down вручную подзапросами. Но вопрос насколько оракл в этом смысле опережает тот же postgres, который ни того ни того делать не умеет.
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308258
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie,
смотри план. там всё написано.
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308276
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintNitro_Junkie,
смотри план. там всё написано.

Если честно, мне просто надо тестировать производительность запросов на разных базах. А держать ms sql, postgres и oracle, с базами на несколько десятков миллионов записей, у меня просто физически комп не выдержит. Поэтому они у меня по очереди активны, и конкретно сейчас рабочего инстанса нигде нету :( Хотя понимаю конечно отговорка так себе :(

Но тут больше вопрос, умеет ли делать Oracle такие вещи в принципе, а не на конкретном запросе. Да и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо.
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308292
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieДа и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо.Как простофиля поверишь форуму?
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308298
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie,
на вопросы в принципе отвечает например гугл . не обязательно при этом озвучивать их на форуме. в конкретном случае помогает план, а риторические вопросы они на то и риторические...
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308308
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintNitro_Junkie,
на вопросы в принципе отвечает например гугл . не обязательно при этом озвучивать их на форуме. в конкретном случае помогает план, а риторические вопросы они на то и риторические...

Эту ссылку я ессно видел. Но там речь идет о проталкивании предиката в подзапрос, причем без группировок. Тут вопрос насколько Оракл умеет группировать предикат, и проталкивать в таблицу, как если бы она была подзапросом.
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308312
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicNitro_JunkieДа и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо.Как простофиля поверишь форуму?

Скажем так, я поверю ответу одного адекватного человека, а не форуму. В ветках других СУБД они есть, и здесь я тоже их встречал достаточно.
...
Рейтинг: 0 / 0
Использование одного join'а два раза в одном плане
    #39308341
хэх...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nitro_JunkieА держать ms sql, postgres и oracle, с базами на несколько десятков миллионов записей, у меня просто физически комп не выдержит. Поэтому они у меня по очереди активны, и конкретно сейчас рабочего инстанса нигде нету
вселенная плачет вместе с тобой от безысходности положения.
легче ?
виртуальный писатель это сильно ))
предлагаю сильнее абстрагироваться - просто рассказы про запросы вместо них самих писать, в качестве эпиграфа добавляя "Select " - ведь все равно негде проверить будет ли работать
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование одного join'а два раза в одном плане
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]