服务器配置了双至强CPU和1G内存,真的是这么慢吗?

解决方案 »

  1.   

    是不是索引对于COUNT不起作用?在对主键使用MAX查询时响应非常快,不到1秒就出结果了。
      

  2.   

    试试 select count(1) from table呢?
      

  3.   


     1. 表做过统计了吗? 
        analyze table TableName  compute statistics; 2. 做过查询计划了吗? 
        是否真正用上了索引? 是 INDEX FAST FULL SCAN 吗? 3. 如果不是统计整个表的函数,查询一条记录是否存在可以用下面
        的方法:    SELECT ORDER_ID INTO :ll_OrderID
        FROM ORDER
        WHERE PROD_ID = :ls_CheckProd
             AND ROWNUM < 2
        USING SQLCA;    IF SQLCA.SQLNRows <> 0 THEN  ...
     
        这种方式比使用count(*)效率高很多.
          
        
        
       
      

  4.   

    try
    select count(rowid) from tablename
      

  5.   

    select count(rowid) from tablename这个方法速度没select count(*) from table; 快!
    不过500万的数据也不要那么久吧,不知道你在什么机器上运行的。下面是我在小型机上运行所花的时间:
    SQLWKS> set timing on;
    计时                        打开
    SQLWKS> select count(*) 
         2> from tablename
         3> 
    COUNT(*)  
    ----------
       1019854
    已选择 1 行。
    分析            0.00(占用时间)   0.00 (CPU)
    执行/读取   1.07(占用时间)    0.39 (CPU)
    合计           1.07              0.39
      

  6.   

    select count(column1) from tablecolumn1有index
      

  7.   

    leecooper0918(PajeroFans),用了analyze之后确实提高了速度,请问如何查看是否使用了"INDEX FAST FULL SCAN"?
      

  8.   


     看查询计划啊步骤:  1. 创建plustrace 角色(以SYS用户登陆)     set echo on     drop role plustrace;
         create role plustrace;     grant select on v_$sesstat to plustrace;
         grant select on v_$statname to plustrace;
         grant select on v_$session to plustrace;
         grant plustrace to dba(or other user) with admin option;     set echo off  2. 创建PlanTable表(以上面被赋予角色的用户登陆)
         
         create table PLAN_TABLE (
    statement_id  varchar2(30),
    timestamp     date,
    res       varchar2(80),
    operation     varchar2(30),
    options        varchar2(30),
    object_node   varchar2(128),
    object_owner  varchar2(30),
    object_name   varchar2(30),
    object_instance numeric,
    object_type     varchar2(30),
    optimizer       varchar2(255),
    search_columns  number,
    id numeric,
    parent_id numeric,
    position numeric,
    cost numeric,
    cardinality numeric,
    bytes numeric,
    other_tag       varchar2(255),
    partition_start varchar2(255),
             partition_stop  varchar2(255),
             partition_id    numeric,
    other long,
    distribution    varchar2(30));  3. 进入sqlplus,敲入 set autotrace on
      4. 运行SQL,你就能看见查询计划了. 
      

  9.   

    count(rowid)的速度不如count(*) 快!
      

  10.   

    select max(rownum) from table
      

  11.   

    leecooper0918(PajeroFans),analyze有什么好处啊?
      

  12.   

    analyze 命令是建立表的统计信息。  一般来说, 一个表上的某一列建了索引后,如果不对表或索引进行
      统计的话,CBO(RBO)不会选择进行索引扫描,而是全表扫描.  如果一个表中的数据进行频繁的插入/删除/更新操作,那么需要定期
      更新这个表上的统计信息。一般我的做法是建立一个JOB,每个月底定期
      更新统计信息.  analyze table Tablename compute statistics 是对全表进行统计,
      在数据量很大时,非常慢,也非常占用temp表空间.为了节省时间,可以
      采用部分数据,进行统计.例如:
     
        ANALYZE  TABLE  tablename  ESTIMATE STATISTICS
        SAMPLE  20  PERCENT    上面语句的意思是采用表中20%的数据进行统计,可以自行设置,
        一般不能小于20%,否则统计出来的信息会不准确.    
      

  13.   

    leecooper0918,Oracle里的触发器对资源消耗大不大?有没有办法计算?我们有一套系统使用了2万多个触发器,服务器运行很慢,能否知道触发器的影响占多大比例?