我在ORACLE数据中插入了1000万条数据(非常简单的数据,由5个varchar2(128)的列构成),是分十个进程同时插入的,每次插入一条数据,插入数据后进程不退出,进行下一次插入。同时在sqlplus中使用select count(*) from tablename进行查询,查询需要将近40s(估算)。机器是redhat as5系统,4核xeon cpu,4g内存+4g swap,程序启动了10个oracle进程,每个进程占用约300M内存,总体内存占用基本是占满的(90%以上),cpu占用约65%。我想问一下,这样的查询速度是不是很不正常,正常的话,对于千万条左右的数据,select count(*) 需要多长时间?能否得到该操作执行的比较精确的时间?另外,对于非常简单的记录,我的程序的插入速度是不是非常慢,需要如何提高程序的插入速度呢?

解决方案 »

  1.   

    select count(*) 这个是需要进行全表扫描的吧 速度肯定......用insert /*+append*/ into ... 这个是直接装载的方式插入数据
      

  2.   

    1、普通插入方式,千万数据,这个时间正常。
    2、insert /*+append*/ into values,这种方式无效,append nologging方式只对批量插入有效。
    3、sqlplus中执行可以使用set timing on来打开计时,存储过程中可以使用dbms_profiler包来计时。
      

  3.   


    --大量数据的insert慢,解决:alter table tb nologging
    drop index index_name        --先删除表上的index(若有)
    insert /*+append*/ into tb   --执行插入
    create index index_name on   --重建index
    alter table tb logging
      

  4.   


    对于为什么时间长 一你是全表扫描 建议count(主键)
    还有你的开了十个进程 每个都有可能在检索数据 你的sga pga redo等快吃不消,这个时候肯定慢
      

  5.   

    select count(1) from tablename……