在整个系统的压力测试下,下面这句SQl语句占用资源比较大,已经将trtp,ctof,trdt,idno加了索引,
但效率还是上不去,请问怎么样能优化一下,使效率提高呢?select sum(slam) as slam from trd_tranlist_"
+ ptid + " where trtp='1' "
+ "and ctof ='0' and trdt = ? and idno=?

解决方案 »

  1.   

    create index xxx on t_xx(idno, trdt, ctof, trtp, slam);建这个索引
      

  2.   


    字段的顺序是,过滤数据量最多的字段放在where条件最后面。
    这样可以提高效率
      

  3.   

    你可以打开oracle的执行计划,查看一下你每次修改sql查询语句后的执行计划,这样就可以找到最优的sql语句。
      

  4.   

    4 楼:你说的是RBO的东西,CBO已经没有这样的说法了
      

  5.   


    哈哈,话说前段时间我面试的时候就被问过这个问题,驱动表和where条件顺序在CBO中有没有作用。
      

  6.   

    把选择率最高的几个建立索引就可以了,索引顺序无所谓的,现在都是CBO时代了,另外trtp和ctof为什么没有使用绑定变量呢??
      

  7.   

    字段的顺序是,过滤数据量最多的字段放在where条件最后面。
    这样可以提高效率,引用四楼的话.
      

  8.   

    使用占位符来写sql语句,然后程序调用,不要这样拼接来实现,
    这样每次都是硬解析
      

  9.   

    看一下你的索引是不是已经用到(在执行计划中)
    如果没有用到 就用强制索引 /*+ index(索引名) */