本帖最后由 ll20100000 于 2013-02-22 17:24:55 编辑

解决方案 »

  1.   


    先谢谢了!
    上面的SQL语句查询两个表,一个大表和一个小表。两个表都是走全表扫描,大表有索引但是没有走索引路线。不知道是为什么,条件当中已经都是索引字段了。
    会不会是函数压制了呢?
      

  2.   

    xxxid3,xxxdate 字段上是否有索引?被选中的数据是否太多了,所以自动优化执行了全表扫描?
    另外 in 可以使用exists 代替
      

  3.   


    10g 以上 in  和existes没有区别了 貌似
      

  4.   

    目前我接触过的 exists 性能比in好多了。
    执行优化几条建议
    1- 把 in改为exists
    2- where 条件中有 <> 并且有函数 他是不会走索引的 考虑函数索引 
      

  5.   

    1、语句的写法上没什么大问题,但我觉得最外侧的查询没有任何意义——但它对性能也几乎无影响2、table2 的这几个字段,xxxxid2、xxx、xxxtype、xxxstatus,有哪个是重复数据较少的,建上索引。3、table1 的xxxid3 字段重复率高么?不高的话建索引。
    4、xxxdate是分区关键字,但是细到什么程度呢?如果是按月的话,对该语句有帮助。按年的话则意义不大。5、3和4综合考虑,可建立xxxid3和xxxdate的复合全局索引。
      

  6.   


    赞同
    table:对xxxdate建local prefixed分区索引;xxxid3 根据可选性(就是重复率高低)可考虑建global prefixed分区索引。
    table2:根据查询条件建立恰当的索引。我遇到过一个类似的查询业务,优化前查询要几分钟,优化后只需0.05秒不到