analyze table tab_a compute statistics;
analyze table tab_b compute statistics;
alter session set optimizer_index_caching=90;
alter session set optimizer_index_cost_adj=50;
再试试

解决方案 »

  1.   

    好像现在一般都是用基于成本的,基于规则的都属于淘汰掉的了,这种的干预肯定是对所有的sql语句都有效的了。如果你想单独对一个sql语句有效,可以加指示,强制使用索引
      

  2.   

    你的这个语句肯定是要全表扫描的,因为你本来就选取了所有的记录,还有如果想用上主键索引,需要
    where里面要有主键字段,获取的数据量占表的20%一下,用索引才是比较有意义的
      

  3.   

    这个问题我也考虑了很长时间了,还是没有找到答案...不过楼主可以到: http://www-900.ibm.com/developerWorks/cn/java/index.shtml 看看,上面也许你您想要的东西!!...要是您找到了答案.请告诉我一下...关注中...
      

  4.   

    SELECT a.cola, a.colb, b.coa
      FROM tab_a a, tab_b b
     WHERE a.cola = b.coa
       AND a.colb = 'a';a.colb上有索引吗?如果没有索引的话不用全表扫描还能有别的办法吗?
      

  5.   

    KingSunSha(弱水三千):我的where中其他字段没有索引
      

  6.   

    zmgowin(隐者(龙祖宗)) :你的语句是作什么用的?
      

  7.   

    fuzhou77(浮舟):怎样强制加指示,使用索引?
      

  8.   

    SELECT a.cola, a.colb, b.coa
      FROM tab_a a, tab_b b
     WHERE a.cola = b.coa
       AND a.colb = 'a';
    a.colb这列没有索引,oracle当然要全表扫描了.
      

  9.   

    11:22:03 SQL> create table t1(a int primary key);表已创建。已用时间:  00: 00: 00.78
    11:22:08 SQL> create table t2(a int primary key);表已创建。已用时间:  00: 00: 00.15
    11:22:08 SQL> insert into t1 values (1);已创建 1 行。已用时间:  00: 00: 00.16Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t1 values (2);已创建 1 行。已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t1 values (3);已创建 1 行。已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t1 values (4);已创建 1 行。已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t2 values (2);已创建 1 行。已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t2 values (4);已创建 1 行。已用时间:  00: 00: 00.16Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t2 values (6);已创建 1 行。已用时间:  00: 00: 00.16Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> insert into t2 values (8);已创建 1 行。已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      INSERT STATEMENT Optimizer=CHOOSE11:22:08 SQL> set autotrace on exp;
    11:22:13 SQL> select a.a,b.a from t1 a,t2 b where a.a=b.a and a.a=2;         A          A
    ---------- ----------
             2          2已用时间:  00: 00: 00.00Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE
       1    0   NESTED LOOPS
       2    1     INDEX (UNIQUE SCAN) OF 'SYS_C006084' (UNIQUE)
       3    1     INDEX (UNIQUE SCAN) OF 'SYS_C006085' (UNIQUE)11:22:20 SQL> show parameter optNAME                                 TYPE    VALUE
    ------------------------------------ ------- ------------------------------
    object_cache_optimal_size            integer 102400
    optimizer_features_enable            string  8.1.6
    optimizer_index_caching              integer 90
    optimizer_index_cost_adj             integer 50
    optimizer_max_permutations           integer 80000
    optimizer_mode                       string  CHOOSE
    optimizer_percent_parallel           integer 0
      

  10.   

    比如这种 : /*+ index (a IDX_CASE__PORT_ID__REV)*/
      

  11.   

    对你应该在a.colb这列加上索引并且a.colb='a'的记录要在20%以下这样就可以使用索引了。
    并且对这两个表以及表上的索引进行分析以便oracle得到统计信息。
      

  12.   

    第一:将t1与t2反过来写,因为oracle 是从右往左进行读取.
    select a.a,b.a from t2 b,t1 a where b.a=a.a and a.a=2;
    第二:看a.a=2这些记录占总记录数的比例.大于20%建议使用全表扫描.
    第三:使用全表扫描,使用hash表进行关联.速度会快一点.