select  cons.constraint_name,cols.column_name,tcols.column_id 
       from all_constraints cons,all_cons_columns cols, all_tab_columns tcols  
        where 
          cons.owner=cols.owner and 
          cons.constraint_name=cols.constraint_name and 
          cons.table_name =tcols.table_name  and 
          cols.column_name=tcols.column_name and 
          cons.CONSTRAINT_TYPE ='U' and 
          cons.Owner='DTS' and 
          cons.table_name='O_EMPLOYEES'; 
该语句执行结果正确,但特别慢,后来做了这样的修改:
select    a.constraint_name,a.column_name,tcols.column_id from 

select  cons.constraint_name, cols.table_name, cols.column_name from 
(select  cons.owner,  cons.constraint_name from  all_constraints cons where  cons.CONSTRAINT_TYPE ='U' and cons.Owner='DTS' and cons.table_name='O_EMPLOYEES'  ) 
cons 
LEFT join  all_cons_columns cols on cons.owner=cols.owner and  cons.constraint_name=cols.constraint_name 
) a 
LEFT join  all_tab_columns tcols  on  a.table_name =tcols.table_name  and a.column_name=tcols.column_name
速度提上去了,但有重复记录,请高人帮忙看一下问题所在

解决方案 »

  1.   

    通过建立索引可以解决你原始SQL慢的问题,改成这样逻辑被改变了,PL/SQL的F5键可以看执行计划,或者用TRACE看
      

  2.   

    没有数据测试,你试试下面的语句
    select  cons.constraint_name,cols.column_name,tcols.column_id 
           from all_constraints cons,all_cons_columns cols, all_tab_columns tcols  
            where 
              cons.owner=cols.owner and 
              cons.constraint_name=cols.constraint_name and 
              cons.owner =tcols.owner  and 
              cons.table_name =tcols.table_name  and 
              cols.column_name=tcols.column_name and 
              cons.CONSTRAINT_TYPE ='U' and 
              cons.Owner='DTS' and 
              cons.table_name='O_EMPLOYEES';
      

  3.   

    select  cons.constraint_name,cols.column_name,tcols.column_id 
           from all_constraints cons,all_cons_columns cols, all_tab_columns tcols  
            where 
              cons.table_name='O_EMPLOYEES' and
              cons.CONSTRAINT_TYPE ='U' and 
              cons.Owner='DTS' and 
              cons.owner=cols.owner and 
              cons.constraint_name=cols.constraint_name and 
              cons.table_name =tcols.table_name  and 
              cols.column_name=tcols.column_name  把越苛刻的条件写得离where越近,这样可以优化,如果还比较慢,可以接合嵌套来解决