2012-06-27 3 views
1

есть две таблицыSQL пола присоединиться к оптимизации

t1 { id, name, ...} 

t2 { t1_id , date_time, parameter, value, ...} 

t1 и t2 оракул распределял таблицы. t2 велико.

я хочу принести t1, который соответствует интервал времени от t2:

select id, name, ... from t1 partition(t1_partition_name) 
where t1.id in(select distinct t1_id from t2 partition(t2_partition_name) 
      where date_time > to_date('20120627 00','YYYYMMDD HH24') 
        and date_time <to_date('20120627 12','YYYYMMDD HH24') 
     ) 

вспомогательный запрос возвратит о 10K t1_id. действительно медленно, любое предложение?

+0

Какая у вас схема разделов на обеих таблицах и у вас есть какой-либо индекс (глобальный/локальный)? Каков объем данных (мощность, размер строк)? –

+0

Удалить «отличную». Он использует хеш для соединения? Можете ли вы опубликовать план выполнения? –

+0

Планы исполнения были бы полезны –

ответ

0

Вы можете попробовать:

SELECT id, name, ... 
    FROM t1 partition(t1_partition_name) aa 
WHERE EXISTS (
    SELECT * 
     FROM t2 partition(t2_partition_name) ex 
     WHERE ex.t1_id = aa.id 
     AND ex.date_time > to_date('20120627 00','YYYYMMDD HH24') 
     AND ex.date_time <to_date('20120627 12','YYYYMMDD HH24') 
    ) 
    ; 

КСТАТИ Я ничего раздела суб-синтаксиса Oracle не знаю. Я ожидаю, что раздел (tx_partition_name) можно полностью удалить, так как СУБД уже должно это знать. Он также сталкивается с фразой «PARTITION BY».

+0

Я думаю, что Существа равны в оговорке в оракуле. но я попробую, THX. – ArdenZhao

+0

Нет, есть разница WRT NULL. (в зависимости от NULLability сравниваемых вещей Обычно они будут PK + FK и, следовательно, (возможно) NOT NULL. Трехзначная логика может вызвать много ошибок) Я не знаю оракула, но «защитный «оптимизатор будет очень осторожен», перетасовывая «обнуляемые/недействительные термины в плане запроса». – wildplasser

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