之前没什么感觉,最近数据库执行操作语句都很慢,用程序连续执行一千多条insert语句要半个多小时。。不知道到底出了什么问题请高手指点下

解决方案 »

  1.   

    跟commit无关吧,我用VC\delphi都是用ado连接的数据库,或者说用ado都会比较慢?
      

  2.   

    ado执行完都会自动commit的吧。。
      

  3.   

    使用ado每insert一次都要commit一次,效率肯定是低的
      

  4.   

    一千多条insert语句要半个多小时?
      

  5.   

    1. 批量commit.
    2. 测试一下redo,考虑append模式.
    3. 查看索引.
      

  6.   

    抱歉这两天都没上来看看,索引应该是没有问题,目前表中只有一个主键的索引,请教一下append模式具体怎么用?以前没有用过
      

  7.   

    速度很慢,我用p/l sql查看,大概一秒只能插入两三条数据,相当慢。。有其他程序连接的时候更慢,最慢的一次发两千多条记录从晚上七点多一直发到凌晨。。
      

  8.   

    append 的用法:insert  /* + APPEND*/
    into
    emp values(1,1,1,1);你最好把表结构脚本(包括索引)和插入语句都贴出来,要不谁也帮不了你。
      

  9.   

    这两个一个是短信的发送表,一个是接收表,
    -- Create table
    create table RECVCMD
    (
      ID          INTEGER not null,
      DELIVERID   INTEGER not null,
      DELIVERTIME DATE default sysdate,
      SVCNUM      VARCHAR2(40) not null,
      USERNUM     VARCHAR2(40) not null,
      LINKID      VARCHAR2(40),
      MSGSTR      VARCHAR2(200),
      DEALFLAG    INTEGER default 0,
      DEALTIME    DATE,
      NDEAL       INTEGER default 0,
      DEALID      INTEGER,
      REMARK      VARCHAR2(120),
      TIMELABEL   DATE default sysdate
    )
    tablespace SMS
      pctfree 10
      pctused 40
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table RECVCMD
      add constraint RECVCMD_PK#ID primary key (ID)
      using index 
      tablespace SMS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create table
    create table SENDSMG
    (
      SMGID        INTEGER not null,
      SRCNUM       VARCHAR2(40) not null,
      DSTNUM       VARCHAR2(40) not null,
      MSGSTR       VARCHAR2(2000) not null,
      SENDTIME     DATE default sysdate,
      STATUS       INTEGER default 0,
      NSEND        INTEGER default 0,
      DTSEND       DATE,
      DTRESP       DATE,
      REPORTSTATUS INTEGER default 0,
      DTREPORT     DATE,
      MSGID        VARCHAR2(40),
      REMARK       VARCHAR2(120),
      TIMELABEL    DATE default sysdate
    )
    tablespace SMS
      pctfree 10
      pctused 40
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table SENDSMG
      add constraint SENDSMG_PK#SMGID primary key (SMGID)
      using index 
      tablespace SMS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );这个是插入数据的语句
    insert into SendSmg (SrcNum,DstNum,MsgStr) values ('xxxxx','xxxxx','test');
      

  10.   

    晕倒知道是怎么回事了。。两个表都有触发器,触发器里面不知道谁写了一个Select count(*)。难怪这么慢。。另外请教一下,在oracle中,如果需要对文本字符进行检索,比如像上面sendsmg表中的dstnum或srcnum,这个我目前没有做索引,但常需要进行检索,那这种情况需要怎么设定索引呢?
      

  11.   

    最简单的建索引:
    CREATE INDEX SSSRCNUM ON SENDSMG
    (SRCNUM);
    CREATE INDEX SSdstnum ON SENDSMG
    (dstnum);