有两个表
t1 { id, name, ...}
t2 { t1_id , date_time, parameter, value, ...}
t1和t2是oracle分区表。 t2很大。
我想获取与t2:
的时间范围匹配的t1select 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)
你可以尝试:
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' )
)
;
BTW I我对Oracle的分区子语法一无所知。我希望可以完全删除分区(tx_partition_name),因为DBMS应该已经知道了。它也与“PARTITION BY”短语相撞。