实况回放:
 表  Table(ID,AGE,NAME,SEXS)
  索引 Index(ID,AGE)
  查询1 SELECT ID,AGE FROM TABLE WHERE ID='02'; 可以使用索引
 查询2 SELECT ID,NAME FROM TABLE WHERE ID='02'; 不使用索引 但是在和这个环境一样的另个数据库中,这2个查询都可以使用索引,到底是为什么阿??
 头都大了
 表,索引,所在表空间都一样,奇怪阿,有谁能给说说阿,谢谢!

解决方案 »

  1.   

    索引使用与否和许多因素有关,其中之一是 select 语句的选择性 selectivity,也就是和查询结果的行数与表的记录总行数的比有关,所以不同的环境下执行同一个语句,可能使用也可能不使用索引。你的例子中的查询1是索引覆盖的查询语句,也就是说,select 子句中的字段列表(id, age)全部包含在一个索引中,通常会使用索引,因为这类语句不用再访问基表,仅访问索引就能够完成查询。而查询二就是视其它条件而定了。
      

  2.   

    现在的问题是,完全相同的查询语句,相同的表,相同的索引 
    为什么在a环境可以用索引,在b环境就不用了呢?? //因为Oracle有基本成本优化(CBO)和基于规则化成(RBO)两种优化方式, 可能是你没有指定优化方式, 在不同的环境下就有可能由Oracle自己决定采取哪种优化方式