1

二つのテーブルがあります

t1 { id, name, ...}

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

t1 と t2 は Oracle パーティション テーブルです。t2 が大きい。

t2 から時間範囲に一致する t1 を取得したい:

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 を返します。それは本当に遅いです、何か提案はありますか?

4

1 に答える 1

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) は完全に削除できると思います。これは、DBMS が既に認識しているはずだからです。また、「PARTITION BY」句とも衝突します。

于 2012-06-27T09:23:59.387 に答える