如何对如下的sql语句进行优化?
DELETE FROM t_ic_student_detail d
  WHERE  EXISTS
   (SELECT 'A'
          FROM   t_ic_student s
          WHERE  s.transaction_id = d.transaction_id AND
                 trunc(og.student_time,
                       'dd') < to_date('20080215', 'yyyymmdd'));  --T_IC_AUDIT_LOG
  DELETE FROM t_ic_student s
  WHERE  trunc(s.log_time,'dd') < to_date('20080215', 'yyyymmdd');
说明: 1: 数据库是oracle
      2:t_ic_student_detail 与t_ic_student 是子主表的关系

解决方案 »

  1.   

    建立外键, 使能级联删除, 如果表空间是归档的, 添加with nolog, 我记得好像是delete with nolog from ....
      

  2.   

    你这样是内层每一条都和外层明细比一次,是乘积,当然慢
    DELETE FROM t_ic_student_detail d 
      WHERE  d.transaction_id in   (SELECT transaction_id    FROM   t_ic_student s 
              WHERE  trunc(og.student_time,   --og是什么?
                           'dd')  < to_date('20080215', 'yyyymmdd')); 
      

  3.   

    不好意思og 是我写错了.
    谢谢,不过这样还是要遍历整个 t_ic_student 表.