我在学习sql_trace时用
select * from 条码详细 where 条码id<>439434 

select * from 条码详细 where 条码id<>‘439434’  
这两句话作比较,因为我在条码id(数值型)上加了索引,所以我预计<>439434 会快一些。可是跟踪的结果是相同的为什么呢?(问1)
********************************************************************************
select * 
from
条码详细 where 条码id<>439434 call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch     3288      0.00       0.00          0       5289          5      210381
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total     3290      0.00       0.00          0       5289          5      210381Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 43  Rows     Row Source Operation
-------  ---------------------------------------------------
 210381  TABLE ACCESS FULL条码详细Rows     Row Source Operation
-------  ---------------------------------------------------
 210381  TABLE ACCESS FULL条码详细
并且都进行了全表访问?(问2)
Misses in library cache during parse: 1
这句话是什么含义?(问3)

解决方案 »

  1.   

    还有如果将<>改为=,两个SQL就应该都使用索引,因为oracle在做自动数据类型转换时是将字符转为数值的。如果ID是字符型的,那么ID=43943是不会使用索引的。
      

  2.   

    我希望通过sql_trace或其他跟踪分析工具证明有些sql语句的写法,需要改进。
    比如下面sql文我认为第一个更有效率。
    select * from table1 where date1='2001/01/23'
    select * from table1 where to_char(date1,'yyyy/MM/dd')='2001/01/23'可是用sql_trace跟踪后 效率和分析结果 两句一样???能给个合适的例子吗?
      

  3.   

    如果date1上建有索引,那么第一个语句应该优于第二个。
    如果仅仅是分析sql语句的优化问题,可以直接在sql plus中set autotrace on或者set autotrace traceonly来查看sql语句的执行计划。
      

  4.   

    优化问题,可以用explain plan来分析,比较详细