同一台电脑,同一个操作系统Windows 2000 Server。同样的表结构,同样的数据(大约4GB内容,200多万条数据)。
操作同样的语句:Select Count(*) from <tablename>我在Oracle 9.2.0.1上运行需要68秒,而在Oracle 10g上运行却只需要1秒多点,这是为什么啊?

解决方案 »

  1.   

    如果表结构完全相同,不可能时间相差那么大。
    楼主不妨,这样再比较一下,
    select count(<PK>) from <table_name>
      

  2.   

    表结构及索引等都是一样的,是用同一句从同一台其它服务器创建物化视图的SQL语句创建的。单操作Select * from <tablename> where <ColName>='xxxx'时,时间上差不多,都是1秒以下。但不知道为何用Select Count(*) From <tablename>时相关那多的时间。环境:同一个操作系统(都没安装其它软件),Oracle 9i 和 Oracle 10g都是新安装的。
    在10g下,无论我安装时选择能用数据库模板创建数据库实例,还是选择自定义方式创建实例,运行时间几乎一样,都是1秒左右。
    在9i下,无论我安装时选择能用数据库模板创建数据库实例,还是选择自定义方式创建实例,运行时间几乎一样,都是68秒左右。
      

  3.   


    如何重新计算统计信息?我的另一台安装Oracle 9i的服务器已经运行了近个把月了(操作上条命令仍需68秒),也需要手动运行统计信息吗?注:我的问贴里提到的安装Windows2000的电脑是个VWMare虚拟机,只有1G内存,但CPU是配睿2的。
    现在我提到的“另一台安装Oracle 9i”的服务器是年初新买的联想服务器,内存4G,双至强CPU,SATA2硬盘。
    但运行Select Count(*)都需要68秒。
      

  4.   

    1.收集统计信息:exec dbms_stats.gather_table_stats('大写表拥有者名称','大写表名',cascade=>true);
    2.查看执行计划:在SQLPLUS中:set autotrace on
    你在两个数据库中都做做看。
      

  5.   


    操作完1的收集统计信息后,select count(*)的时间变为1秒。要多久需要收集一次统计信息?
    为何同是默认安装,10g不需要手动收集统计信息?
      

  6.   

    sysdba权限执行如下,开启自动统计分析:exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
      

  7.   

    晕。执行完收集统计信息后,select count(*)出来的值不更新了(这个表里的数据是物化视图来的)。