我这个字段不是很常用,另外: 索引有个数限制么? 如果有的话, 是表上创建的总个数有限制,还是 查询时能用的个数有限制?我上面的语句的条件不同,但是是同一个字段啊,
一个是 ratingPower  > 1 < 999, 
另外的是 
  ratingPower >1  
和ratingPower < 999同时加上和只加一个怎么会有区别呢?我还是不明白为什么同一个字段上会因条件不同计划也不同?

解决方案 »

  1.   

    补充,最后查询的结果是一样的。其实所有的记录的 ratingPower 其实都在 [1,999] 之间。
      

  2.   

    你的优化模式是什么?是不是一个是table full scan一个是index range scan.
      

  3.   

    你的機器配置不錯啊!!d.Re = 0 是是否類型吧?d.Device_Id = p.Boiler_Id 是關鍵字吧?p.Ratingpower >= 1 And p.Ratingpower <= 99999 是數字類型吧?語句優化好象是  inne jion    on   Device id  Boiler_id
    where p.Ratingpower <= 9999 and d.Re = 0 
      

  4.   

    p.Ratingpower 看來不是有序類型的數字吧?語句優化好象是  inne jion    on   Device id  Boiler_id
    where p.Ratingpower <= 9999 andp.Ratingpower>=1 d.Re = 0 Oracle  比較笨    它要個變量綁定    你那三個語句不全部相同  所以執行計劃不能重用
      

  5.   

    Re 字段是删除标记很常用,所以建了索引。以下是 PL/SQL Developer 给出的:A:
    SELECT STATEMENT, GOAL = RULE
     NESTED LOOPS
      TABLE ACCESS BY INDEX ROWID SCHEMAA DEVICE
       INDEX RANGE SCAN SCHEMAA IN_DEVICE_REMARK
      TABLE ACCESS BY INDEX ROWID SCHEMAA BOILER
       INDEX UNIQUE SCAN SCHEMAA PK_BOILER
    1.Select d. *, p. * From Device d, Boiler p
     Where d.Re = 0 And d.Device_Id = p.Boiler_Id And p.Ratingpower >= 1 And
     p.Ratingpower <= 99999执行计划显示:
    列依次是  执行步骤描述,  ObjectOwner, Object Name,    Cost , cardinality , bytes.
    GOAL =first_rows 和 GOAL=all_Rows 一样的: SELECT STATEMENT, GOAL = FIRST_ROWS 209 141 1213446
     NESTED LOOPS 209 141 1213446
      TABLE ACCESS FULL SCHEMAA BOILER 68 141 1160289
      TABLE ACCESS BY INDEX ROWID SCHEMAA DEVICE 1 1 377
       INDEX UNIQUE SCAN SCHEMAA PK_DEVICE 3
    2:  上面 2 ,3 语句的计划是一样的,
    Select d. *, p. * From Device d, Boiler p
     Where d.Re = 0 And d.Device_Id = p.Boiler_Id And p.Ratingpower >= 1 GOAL=first_rows 和 GOAL=all_rows 一样的.
    列依次是:
    执行步骤描述,  ObjectOwner, Object Name,Cost , cardinality , bytes.       
    SELECT STATEMENT, GOAL = FIRST_ROWS 1230.68689776287 2818 24251708
     NESTED LOOPS 1230.68689776287 2818 24251708
      TABLE ACCESS FULL SCHEMAA BOILER 68 2818 23189322
      TABLE ACCESS BY INDEX ROWID SCHEMAA DEVICE 1230.68689776287 1 377
       BITMAP CONVERSION TO ROWIDS
        BITMAP AND
         BITMAP CONVERSION FROM ROWIDS
          INDEX RANGE SCAN SCHEMAA PK_DEVICE 3
         BITMAP CONVERSION FROM ROWIDS
          INDEX RANGE SCAN SCHEMAA IN_DEVICE_REMARK 9 3
      

  6.   

    如果有优化办法的话我在 SQL 语句中要怎么告诉 Oracle 使用我期望的优化方案呢?
      

  7.   

    看到数字的所有字段数据库里也全是 Number 型的。
    re 建了索引, Device , Boiler 主键的值是相同的,一对一关联。