表a(a1(PK),a2,a3)
表b(b1(PK),b2,b3,a1)
表c(b1(PK),c2,c3,a1)
都是大数据量表
a:b=n:1 
b:c=1:1
下面语句怎么优化下(查询字段都有索引)
select * 
from a,b,c
where a.a1=b.a1 and b.b1=c.b1 and c.c2 between 开始时间 an 结束时间 and b.b2='1'

解决方案 »

  1.   

    select /*+ ordered use_hash(c,b) index(c index_c)*/
     * 
    from a,c,b 
    where a.a1=b.a1 and b.b1=c.b1 and c.c2 between 开始时间 an 结束时间 and b.b2='1'
      

  2.   

    原则: 将中间结果最小的放最前面
    比如,c的begin_date和end_date可以大量过滤数据的话,就要强制使用c2上的索引,并让c2在执行计划中尽量靠前
      

  3.   

    若为多CPU,启用并行查询hint试试?
      

  4.   


    ---------
    oracle 10G后,对表的顺序和字段关联顺序无关
      

  5.   

    select * 
    from a,
    (select * from b where b2='1' )b,
    (select * from c where c2 between 开始时间 an 结束时间 )c 
    where a.a1=b.a1 and b.b1=c.b1
      

  6.   

      数据库优化 资料  http://download.csdn.net/source/1820924    或者http://download.csdn.net/source/1824001   如果想提高水平可以看下