select  t1.m,t1.n
from t1,t2
where t1.a=t2.a(两表在a上均有索引)
      and (t2.c=p_code or p_code is null)(c字段上上有索引)
      。t1表大概有几百万条数据,t2表几十万条数据,这个sql是过程中其中一个最慢的,p_code是个参数,如果不为空则按t2.c=p_code 查询,请大家看看哈,我应该向什么方向优化,先看哪些方面?
t2表虽然走了在a字段上的索引,但因表的行排序跟这个索引不同,所以i/o等待时间比较长

解决方案 »

  1.   

    现在没有,可能是因为数据量大的原因,t1表没有走索引,是全表扫描。
    能给个sql优化的大体方向吗?
      

  2.   

    关键看t2.c的选择度有多高,也不知道你所说的c字段上面有索引,指的单个字段的索引还是跟其他字段一起的复合索引。如果t2.c的重复值很少,那么就在t2上面建个c,a的复合索引。
    另外,统计信息对于执行计划很重要,把这两个表的统计信息再重新收集一次,然后再看看执行计划