--表结构如下:
create table qk_billinfo0806
(
  BILLID      NUMBER(20) not null,
  WRITETIME   DATE not null,
  PRINTTIME   DATE,
  CONTENT     VARCHAR2(4000) not null,
  SERVICETYPE NUMBER(3) not null,
  BILLTYPE    NUMBER(6) not null,
  BILLSTATUS  NUMBER(3) not null,
  DISCOUNTDAY NUMBER(6) not null,
  FAILNUM     NUMBER(6) not null,
  BILLINEDEX  NUMBER(20) not null
)
tablespace RING
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
现在我想从一张数据量特别大,表结构一样的表中提取五月份的数据
写的脚本如下:
INSERT INTO qk_billinfo0806
(
SELECT  *
FROM gdusdp.t_billinfo a 
WHERE a.writetime < to_date('2008-5-2','yyyy-mm-dd')
AND a.writetime >= to_date('2008-5-1','yyyy-mm-dd')
AND a.billtype=41
AND a.billstatus=3

)
这样写插入速度太慢,但条件又不能少?可否有更好的建议和优化方法?
很急!!!!!!!!!
先谢谢各位大师啰!
备注:查询的那张表(见红色标识)里数据有百万以上!因为存放的是前几个月的数据.

解决方案 »

  1.   

    大表建立在哈希簇中或者建分区表,将一个大表分开放置在几个逻辑分区中或者是将一个大表分成了几张小表 ,即可以单独对这些小表进行查询,也可以union all一 起查询。
      

  2.   

    a.writetime、a.billtype、a.billstatus分别建索引试试,最好把执行计划贴出来。
      

  3.   

    另外把表改为nologging,然后使用hint来插入(insert /*+ append */ into)也是可是可以明显提高速度的。
      

  4.   

    nologging并不需要改变表结构的。
      

  5.   

    1.
    Insert /* + APPEND */ into qk_billinfo0806
    SELECT  * 
    FROM gdusdp.t_billinfo a 
    WHERE a.writetime < to_date('2008-5-2','yyyy-mm-dd') 
    AND a.writetime >= to_date('2008-5-1','yyyy-mm-dd') 
    AND a.billtype=41 
    AND a.billstatus=3 2.
    将writetime中建立索引,billtype、billstatus这两列如果有很强过滤能力也可以加上,否则就不要加了。