先对FJFILE进行筛选查出子查询,即
select FILE_ID,FILE_NAME from FJFILE where TELATE_TABLE = 'FOODPRODUCT'
(筛选掉无用的列和记录是非常重要的~)然后用这个子查询的结果,与FOODPRODUCT 表联立~
(虽然不一定能达到你要的效果,但效果绝对是立杆见影)
整个sql改为:select *
  from (select row_.*, rownum rownum_
          from (select a.ID            ,
                       a.UNIT          ,
                       a.REGISTER_DATE ,
                       a.CHARACTER     ,
                       a.DIRECTOR      ,
                       a.ZGRS          ,
                       a.CAPITAL       ,
                       a.APPLY_ITEM    ,
                       b.FILE_ID       ,
                       b.FILE_NAME     
                  from FOODPRODUCT a, 
                       (select FILE_ID,FILE_NAME from FJFILE where TELATE_TABLE = 'FOODPRODUCT') b
                       
                where a.ID(+) = B.REELATE_ID
                order by a.ID
                 ) row_
         where rownum <= 2000)
 where rownum_ > 1900

解决方案 »

  1.   

    子查询改这个: (因为REELATE_ID在后面联立有用到)
    select REELATE_ID,FILE_ID,FILE_NAME from FJFILE where TELATE_TABLE = 'FOODPRODUCT'
      

  2.   

    除了上面的子查询改进外(index就不说了,自己建着试试,基本没啥用,我估计你的ID和releate_id上本来就有index的),
    另外再试试把两个表的位置交换, 把where a.ID(+) = B.REELATE_ID两边交换.
    (效果是不同的,我忘了应该把大表放在前,还是小表放在前?)
      

  3.   

    to sozdream():用外关联速度很快0.1秒,为什么用内关联速度很慢要20多秒,不是内关联的速度比外关连快吗???
      

  4.   

    为什么内连接比外连接速度还要慢得多???
    本人根据你的语句建立了两个表当没有建索引!
    1外连接 计划:
     0 全表扫描 
     0 全表扫描
     1 HASH JOIN OUTER  2内连接
     0 全表扫描
     1 SORT JOIN
     0 全表扫描
     1 SORT JOIN
     2 MERGE JOIN
      

  5.   

    改我的方法是0.1秒?  我也没想到立杆见影这么厉害...(我本来以为大概在1秒左右)其实主要原因还是在于集合大小的问题:
    200000条记录*60000条记录 = 120亿~
    但如果先在60000中筛选记录(用这个筛选TELATE_TABLE = 'FOODPRODUCT'), 那么运气好的话,只剩下不到1000条记录, 而且列数量只剩下3个~ 再相乘,当然会加快咯~ 200000条记录*1000条记录 + 60000条记录浏览 = 2亿零6万~ 比上面相成的结果行数小了60倍,而且列也减少了这样速度哪有不快的道理??  (不过只用了0.1秒我是没想到~~)
      

  6.   

    我不知道内连接和外连接什么区别~ 
    主要是我只会写一种: a(+)=b, 
    outer join, inner join没学过,不会写