sql优化案例一:使用了表达式不会使用索引

   最近在客户那做数据库性能调优时,发现一些程序开发的sql 写法确实不好,导致

     使用不上索引,占用cpu过高,而影响应用,数据库采用的是RBO模式

     以下是一个测试方法;

      在开发中 sql写法类式是

        select  * from test  where test_date+1>to_date('2008-09-26','yyyy-mm-dd');

     这样就不会用上索引

     而改成下面这样就可以用上

       select  * from test  where test_date>to_date('2008-09-26','yyyy-mm-dd')-1;

SQL> select * from test where test_date+1>to_date('2008-09-25','yyyy-mm-dd');

        ID TEST_DATE
---------- ----------
         1 27-9月 -08
         1 26-9月 -08
         1 25-9月 -08
         1 25-9月 -08


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT ptimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'TEST'

 


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         16  consistent gets
          0  physical reads
          0  redo size
        493  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

SQL> select * from test where test_date>to_date('2008-09-25','yyyy-mm-dd')-1;

        ID TEST_DATE
---------- ----------
         1 25-9月 -08
         1 25-9月 -08
         1 26-9月 -08
         1 27-9月 -08


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT ptimizer=CHOOSE
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
   2    1     INDEX (RANGE SCAN) OF 'IDX_TEST' (NON-UNIQUE)

 


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        493  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

SQL>

 

一致性读从16降到6,目前测试的数据量比较小,但如果数据量很大,那将是一个

很大的性能提升

 

以下几种操作会显示的阻止oracle使用索引

2, f1 is null, f1 is not null, f1 not in, f1 !=, f1 like ‘%pattern%’;

3, Not exist

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7199859/viewspace-464608/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7199859/viewspace-464608/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值