创建一个表tablename  有两个字段 A ,B  在这两个字段上分别创建索引 INDEX_A  , INDEX_B ,那么我在查询select * from tablename where A=value and B= value  1、这样的where 子句能用到A 和 B 的索引吗?我觉得应该是能用到A 的索引但用不到B 的索引? 
2、如果有这样的查询是不是最好创建一个 联合索引 好一点?

解决方案 »

  1.   

    1, 两个列上都有索引,那么这种情况下使用哪个索引要看oracle怎么判断Index_a和index_b的选择性;比如说,index_a是唯一索引,而B列存储的是性别字段,而且你对表和索引都进行了分析,那么oracle肯定使用index_a;
       但,楼主你可以强制oracle选择你希望其执行的索引;
       select /*+ index(a index_b) */ from tablename where a=value and b=value;
    2, 当然,如果能创建一个联合索引的话,并且你使用了选择性较好的列作为前导列,那么联合索引应该会有更好的执行效率。相反,你如果选择了选择性较差的列作为了前导列,其效率可能还不如单个列的索引。