我的SQL语句:
select count(*) from mytable where a='xxx' and substr(b,1,4)='xx' and 
substr(c,1,2)='xxxx' 
其中mytable中有数据几百万,字段a为索引字段,我想问下的是,如果把a='xxxx'索引字段的秩序调到后面或是中间,对查找速度有没有影响,应该怎样排才能达到最好的最快速度的效果!!谢谢!

解决方案 »

  1.   

    如果是RBO的话,把A=‘XX’放大后面可以加快速度。
    但是,如果是CBO的话,就没有必要的了。放在哪里都差不多了。
      

  2.   

    create index ix_b_mytable on mytable(substr(b,1,4));
    create index ix_c_mytable on mytable(substr(c,1,2));
      

  3.   


     1.你这条语句的问题主要出在 substr函数的使用上,对索引列的任何
       函数操作都将导致索引失效,除非你建了基于函数的索引(上面朋友写
       的漏了 function 关键字) 2.启用sqltrace看看Oracle的查询计划. 
       alter session set sql_trace=true;
     
    3. RBO(Rule Based Optimize):基于规则的优化
       CBO(Code-Based Optimize):基于成本的优化
       Oracle 推荐使用后者.