CDR_DATA表数据比较大,并且没有index,下面这条语句比较简单,就是想取出满足条件的纪录的条数。不用index
大侠们看看有没有优化性能的可能。
现在大概是5秒,希望能提高的越快越好。SELECT count(*) INTO d_count 
FROM cdr_data 
WHERE 
account_no  <> v_billed_account_no  
and subscr_no = v_subscr_no 
and subscr_no_resets = v_subscr_no_resets  
and msg_id>-1;primary-key on msg_id。200分相送。

解决方案 »

  1.   

    大家好,我是猎头公司的,现在手上有一个猎头职位,是关于数据库开发的,要求会PL/SQL,和常用的几种数据库,三年以上数据库开发经验,公司是一家上市国企,主要是做通信的,在全国大概有二十几家分公司这样,上班位置在西四环附近,如果有兴趣的可以直接加我MSN:[email protected]或直接发简历到[email protected],谢谢,机会不错,希望把握!!!
      

  2.   

    有的时候count(rowid)会稍微快一点,但是CPU占用却又高了一点
      

  3.   

    (21)  避免在索引列上使用NOT 通常, 
    我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.
      

  4.   

    (22)  避免在索引列上使用计算.
    WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 
    举例: 
    低效: 
    SELECT … FROM  DEPT  WHERE SAL * 12 > 25000; 
    高效: 
    SELECT … FROM DEPT WHERE SAL > 25000/12;
      

  5.   

    (3)      SELECT子句中避免使用 ‘ * ‘:
    ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间
      

  6.   

    23)  用>=替代>
    高效: 
    SELECT * FROM  EMP  WHERE  DEPTNO >=4 
    低效: 
    SELECT * FROM EMP WHERE DEPTNO >3 
    两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.
      

  7.   

    针对你的sql给出以上4个可行方案 供参考~!!忽忽
      

  8.   

    不用index不太可能又质的提高吧。为什么不用那?   怕影响插入速度  还是没有权限?subscr_no,subscr_no_resets    kenan?   杭州?