第三条慢是因为会去tabAA,tabAB上去检查基于此主键的外键是否存在
你禁用外键是一种解决方法,也可建立外键时不要设参数on delete cascade

解决方案 »

  1.   

    不好意思打错了,
    建议你建立外键时设参数on delete cascade
    这样你删除tabA后会级联删除tabAA,tabAB的数据
      

  2.   

    禁掉tabAA,tabAB中的外键,tabA中就能删掉似乎不应该有这样的问题~
      

  3.   

    to daydayupliq(强强) 
    它消耗的时间是在tabAA,tabAB上寻找 ZtCode='001'的check时间,
    即使已经删除了check时间还是存在的(就是确认是否已经删除的过程)
      

  4.   

    建议你建立外键时设参数on delete cascade
    这样你删除tabA后会级联删除tabAA,tabAB的数据
    这样会更快点么??? 发现一个tabA的主键,然后就删除它?
    另外普通外键还有什么建法呢?学习!!楼主的这个问题会不会是这个错误呢?
    ERROR at line 1:
    ORA-02266: 表中的唯一/主键被启用的外部关键字引用
      

  5.   

    楼主不好意思,呵呵,我对外键这个概念的确比较糊涂~ 
    1、如果建立普通外键,那么删除父表,对子表应该没有什么影响;
    2、on delete cascade,应该会级联删除子表中的记录;
    3、我用on delete cascade时,遇到了可以delte 但不能truncate的错误:
    SQL> insert into b select * from dept;4 rows created.SQL> insert into a select * from emp;14 rows created.SQL> commit;Commit complete.SQL> alter table a add constraint pk_a primary key  (empno);Table altered.
    SQL> alter table b add constraint pk_b primary key  (deptno);Table altered.
    SQL> alter table a add constraint fk_a foreign key  (deptno) references  dept(d
    ptno) (on delete cascade);Table altered.SQL> delete from b where deptno=10;1 row deleted.SQL> truncat table b;
    SP2-0734: unknown command beginning "truncat ta..." - rest of line ignored.
    SQL> truncate table b;
    truncate table b
                   *
    ERROR at line 1:
    ORA-02266: 表中的唯一/主键被启用的外部关键字引用
      

  6.   

    谢谢二位参与的讨论,我刚才找到了教我们学习oracle开发的刘老师,教了我一个方法,解决了这个困扰我的问题,就是在两个子表中,建立与外键相应的索引,normal的就行,然后再删除,居然效率提高了n多倍,真是惊诧!!汉!
      

  7.   

    todaydayupliq
    普通外键,从表有主表相关记录,主表记录是无法删除的
    删除父表,会用主表的主键去查询从表的外键
    truncate 对普通外键也是一样的,因为它是ddl不是DMLto  commit
    ft,你外键上没有建索引?
    你建立外键后,删除父表,用主表的主键去查询从表的外键时就是一个索引JOIN索引快多了。偶觉得,外键者,鸡肋也  :)
      

  8.   

    外键一般是要建立索引的~普通外键,从表有主表相关记录,主表记录是无法删除的
    普通外键是不是不加(on delte **),这个没有实验出来~