我觉得这样的写法应该很ok的;
不过如果你不是需要a.*, b.*,只写出必要的字段,相信在响应时间上可以更快些,

解决方案 »

  1.   

    发现奇怪的现象:
    我再执行select * from c where where name like '陆%'的时候只需要耗时0.172秒(name 字段有索引)
    可是如果不加条件的select * from c则需要7秒以上ft
    请问有没有什么合理解释?
      

  2.   

    而我用select * from c where id != 0 之类的条件却不会加快查询速度
    select * from c where gender=1 需要3秒多的时间, 而gender字段也有索引 为什么差距这么大呢?
      

  3.   

    首先, c是一个视图,而不是具体的表。 我没研究过oracle具体是
     怎样对视图进行优化的,但是对表的查询优化基本有这么几个原则:
      
      1. 例如 "select * from c where id != 0"这样的查询语句,是不会用上
         索引的,如果id的取值不多,可以考虑建立bitmap index(OLTP类型的系统
         不建议使用bitmap index)  2.  select * from c则需要7秒    
          -------------------------
          很正常,大表的连接代价是比较高的,关联匹配的数据量占
          表的总数据量的多大? 如果比率很高的话,索引效率不会很好
     
      3. 不是查询列上建立了索引,就一定会提高效率。有些情况下,全表扫描
          的效率要高于索引.  4. 优化器是什么模式? 如果是rbo,要注意驱动表的位置.  5. 表和索引有没有进行过统计? 如果没有,先做一个统计
         analyze table a compute statistics;
         analyze table b compute statistics;     也可以只更新索引的统计信息,具体的查一下相关资料吧.  
     
      

  4.   

    首先要非常感谢leecooper0918(爱一个人好难) 呵呵
    我使用analyze table a compute statistics;
         analyze table b compute statistics;
    两条命令之后再执行select * from c 只需要2秒钟了
    可是对这个统计的具体含义我还不太清楚 也不知道当数据变化后是否还有效
    这个得查查看了 :p
      

  5.   

    如果数据更新比较频繁,要定期更新统计信息。
     做一个job吧,定期更新.