0

サブクエリを使用して最大値を取得しないように、次のクエリを最適化したい:

select c.ida2a2 from table1 m, table2 c 
where c.ida3a5 = m.ida2a2 
and (c.createstampa2 < (select max(cc.createstampa2) 
                        from table2 cc where cc.ida3a5 = c.ida3a5));

何か案が?さらに詳しい情報を知りたい場合はお知らせください。

4

1 に答える 1

3

これはクエリを書くためのより効率的な方法かもしれません:

select c.ida2a2
from table1 m join
     (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs
      from table2 c 
     ) c
     on c.ida3a5 = m.ida2a2
where c.createstampa2 < maxcs

Oracleがこれを正しく最適化すると確信しています(結合前に行をフィルタリングします)。より明確にしたい場合:

select c.ida2a2
from table1 m join
     (select c.*
      from (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs
            from table2 c 
           ) c
      where c.createstamp2 < c.maxcs
     ) c
     on c.ida3a5 = m.ida2a2
于 2013-02-08T16:47:58.727 に答える