|
|
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
Работаю с таким запросом: Код: plsql 1. Таблицы 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, который ни того ни того делать не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 11:00:11 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, смотри план. там всё написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 11:35:56 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
VintNitro_Junkie, смотри план. там всё написано. Если честно, мне просто надо тестировать производительность запросов на разных базах. А держать ms sql, postgres и oracle, с базами на несколько десятков миллионов записей, у меня просто физически комп не выдержит. Поэтому они у меня по очереди активны, и конкретно сейчас рабочего инстанса нигде нету :( Хотя понимаю конечно отговорка так себе :( Но тут больше вопрос, умеет ли делать Oracle такие вещи в принципе, а не на конкретном запросе. Да и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 11:47:12 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieДа и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо.Как простофиля поверишь форуму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 11:55:00 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, на вопросы в принципе отвечает например гугл . не обязательно при этом озвучивать их на форуме. в конкретном случае помогает план, а риторические вопросы они на то и риторические... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 11:58:50 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
VintNitro_Junkie, на вопросы в принципе отвечает например гугл . не обязательно при этом озвучивать их на форуме. в конкретном случае помогает план, а риторические вопросы они на то и риторические... Эту ссылку я ессно видел. Но там речь идет о проталкивании предиката в подзапрос, причем без группировок. Тут вопрос насколько Оракл умеет группировать предикат, и проталкивать в таблицу, как если бы она была подзапросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 12:06:57 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
ElicNitro_JunkieДа и ответ на каждый из пунктов одно слово : Да и Нет. И проверять ничего не надо.Как простофиля поверишь форуму? Скажем так, я поверю ответу одного адекватного человека, а не форуму. В ветках других СУБД они есть, и здесь я тоже их встречал достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 12:08:46 |
|
||
|
Использование одного join'а два раза в одном плане
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieА держать ms sql, postgres и oracle, с базами на несколько десятков миллионов записей, у меня просто физически комп не выдержит. Поэтому они у меня по очереди активны, и конкретно сейчас рабочего инстанса нигде нету вселенная плачет вместе с тобой от безысходности положения. легче ? виртуальный писатель это сильно )) предлагаю сильнее абстрагироваться - просто рассказы про запросы вместо них самих писать, в качестве эпиграфа добавляя "Select " - ведь все равно негде проверить будет ли работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2016, 12:38:38 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39308341&tid=1887470]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 313ms |

| 0 / 0 |
