我有一个比较复杂的select 语句,多个表关联,select 十几秒,原表有3000W条数据,我目前每次查询一个月数据,大约50多万条数据,然后插入到目标表。但是insert进表的时候却要了一个多钟头!而且目标表没索引,没约束,没外键!但是对原表的Select查询却很快,但是跑存储过程就要很久!各位帮忙看看什么原因insertoracle存储

解决方案 »

  1.   

    你insert该表的时候是否阻止其他session对该表进行DML操作?那样的话考虑使用hint
    /*+ append */ insert /*+ append */  into ....;如果你的数据库运行在归档模式,需要该表为nologging,否则可能效果不明显。
      

  2.   


    我现在只是把原表的数据Insert到目标表,还未对目标表进行查询等操作,再说我现在只有一个用户管理该表,应该没有其他Session对该表进行DML操作吧?谢谢。
      

  3.   

    create table T_TBL_HX
    (
      proposalcontno    VARCHAR2(20),
      prtno             VARCHAR2(20),
      conttype          VARCHAR2(1),
      familytype        VARCHAR2(1),
      poltype           VARCHAR2(1),
      poltypename       VARCHAR2(30),
      cardflag          VARCHAR2(1),
      managecom         VARCHAR2(10),
      managename        VARCHAR2(200),
      agentcom          VARCHAR2(20),
      agentcomname      VARCHAR2(200),
      agentcode         VARCHAR2(10),
      agentname         VARCHAR2(200),
      idno              VARCHAR2(30),
      agentdept         VARCHAR2(100),
      agentdeptname     VARCHAR2(200),
      agentgroup        VARCHAR2(12),
      agentgroupname    VARCHAR2(200),
      agentcode1        VARCHAR2(10),
      agenttype         VARCHAR2(20),
      salechnl          VARCHAR2(2),
      salechnlname      VARCHAR2(20),
      appntno           VARCHAR2(24),
      appntname         VARCHAR2(120),
      appntsex          VARCHAR2(4),
      appntbirthday     DATE,
      appntidtype       VARCHAR2(40),
      appntidno         VARCHAR2(20),
      appntadd          VARCHAR2(200),
      appntzipcode      VARCHAR2(20),
      appntphone        VARCHAR2(20),
      insuredno         VARCHAR2(24),
      insuredname       VARCHAR2(120),
      insuredsex        VARCHAR2(4),
      insuredbirthday   DATE,
      insuredidtype     VARCHAR2(40),
      insuredidno       VARCHAR2(20),
      payintv           INTEGER,
      payintvname       VARCHAR2(100),
      paymode           VARCHAR2(1),
      paymodename       VARCHAR2(100),
      signcom           VARCHAR2(10),
      signdate          DATE,
      bankcode          VARCHAR2(10),
      bankaccno         VARCHAR2(40),
      accname           VARCHAR2(60),
      currency          VARCHAR2(2),
      peoples           INTEGER,
      mult              NUMBER(20,5),
      prem              NUMBER(16,2),
      amnt              NUMBER(16,2),
      sumprem           NUMBER(16,2),
      dif               NUMBER(12,2),
      paytodate         DATE,
      firstpaydate      DATE,
      cvalidate         DATE,
      cinvalidate       DATE,
      uwflag            VARCHAR2(1),
      uwflagname        VARCHAR2(100),
      uwoperator        VARCHAR2(10),
      uwdate            DATE,
      appflag           VARCHAR2(1),
      polapplydate      DATE,
      getpoldate        DATE,
      customgetpoldate  DATE,
      state             VARCHAR2(10),
      statename         VARCHAR2(200),
      proposaltype      VARCHAR2(2),
      salechnldetail    VARCHAR2(2),
      scdname           VARCHAR2(20),
      contprintloflag   VARCHAR2(1),
      contpremfeeno     VARCHAR2(20),
      customerreceiptno VARCHAR2(20),
      riskname          VARCHAR2(1000),
      typeno            VARCHAR2(2),
      syncdate          DATE
    )
      

  4.   

    像这个表的列也不算太多吧,在Oracle中执行Insert语句是不是应该达到5000/s这个速度,或则更高。