2016-09-22 8 views
0

Могу ли я использовать вот так?Могу ли я одновременно установить подсказку MAPJOIN и подсказку STREAMTABLE?

select /*+ MAPJOIN(t2)*//*+ STREAMTABLE(t1)*/ 
     t1.c1. 
     t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

И я смущаюсь о «STREAMTABLE» на разных клавишах соединения.

Например: t3 - самый большой стол, а t2 - вторичная большая таблица, t1 - наименьшая таблица.

select 
    /*+ STREAMTABLE(t2)*/ 
    t1.c3, 
    t2.c2, 
    t3.c3 
from t2 
left outer join 
t1 
on t2.c1=t1.c1 
left outer join 
t3 on t2.c2=t3.c2; 

Так что, если когда t2 t1 присоединиться к его ok.but когда t2 t3 присоединиться, если t2, если по-прежнему рассматриваться как большой стол? Как справиться с этой ситуацией?

+0

Не используйте такие подсказки вообще. Оптимизатор с затратами будет выполнять эту работу. Используйте оптимизатор на основе затрат + статистику. – leftjoin

+0

@leftjoin Привет, как я могу это сделать? Моя версия улья 0.13.x? Что мне делать? – user5107182

+0

Обновление. 0.14 Улей на Tez работает намного быстрее, и никаких намеков больше не требуется. – leftjoin

ответ

0

Вы можете достичь этого со следующим:

select /*+ MAPJOIN(t2), STREAMTABLE(t1)*/ 
    t1.c1. 
    t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

Есть ненулевая число СВО связанных с дефектами, которые могут по-прежнему работают в, особенно с участием Windowing функции и столбчатых форматов в моем опыте. Поэтому полезно знать, как эффективно применять подсказки.

Смежные вопросы