1、select * from a where title ="hello"  
title 列上没有索引,是不是只要查询用到的列上没有索引,就会全表扫描 这条语句会全表扫描吗? 2、select * from a where title ="hello" and name = 'test'; 
  
name 上有索引,title上没有,这条语句会全表扫描吗? 是不是没有索引就会全表扫描?

解决方案 »

  1.   

    set autotrac on
    自己看看就知道了
      

  2.   

    1 、oracle的优化器有两种RBO 和CBO类型
    2、现在一般都是用CBO(cost based optimizer),基于成本的
    3、where条件里的列都没有索引,那只能FTS了(比如你的例子1),但有index也不一定就走索引(比如你的例子2),CBO会智能的选择是否使用索引还是走全表扫描(FTS),这个要看走index还是FTS两者谁的成本(cost)低。成本高低判断要依赖于统计信息(statistics),所以你分析(analyze)你的表和索引。e.g.
    analyze a compute statistics;
    4、一般走index 比较好,( 但不是一定的,前面第3点已经说明),所以我们更多要去查找为什么有所索引而没走,情况有很多种
    e.g. 对索引列进行运算,索引不存储空值,非leading column,索引的选择性不高等,这个google下,不再详述