有一张表,表结构如下:
-- Create table
create table AVGCUSCKBAL
(
  AVGCKCUSID  VARCHAR2(20),
  AVGCKACTNO  VARCHAR2(25),
  AVGCKNAME   VARCHAR2(255),
  AVGCKKMH    VARCHAR2(7),
  AVGCKKHRQ   VARCHAR2(8),
  AVGCKXHRQ   VARCHAR2(8),
  AVGCKMONTH  VARCHAR2(20),
  AVGCKD01    NUMBER(18,2) default 0 not null,
  AVGCKD02    NUMBER(18,2) default 0 not null,
  AVGCKD03    NUMBER(18,2) default 0 not null,
  AVGCKD04    NUMBER(18,2) default 0 not null,
  AVGCKD05    NUMBER(18,2) default 0 not null,
  AVGCKD06    NUMBER(18,2) default 0 not null,
  AVGCKD07    NUMBER(18,2) default 0 not null,
  AVGCKD08    NUMBER(18,2) default 0 not null,
  AVGCKD09    NUMBER(18,2) default 0 not null,
  AVGCKD10    NUMBER(18,2) default 0 not null,
  AVGCKD11    NUMBER(18,2) default 0 not null,
  AVGCKD12    NUMBER(18,2) default 0 not null,
  AVGCKD13    NUMBER(18,2) default 0 not null,
  AVGCKD14    NUMBER(18,2) default 0 not null,
  AVGCKD15    NUMBER(18,2) default 0 not null,
  AVGCKD16    NUMBER(18,2) default 0 not null,
  AVGCKD17    NUMBER(18,2) default 0 not null,
  AVGCKD18    NUMBER(18,2) default 0 not null,
  AVGCKD19    NUMBER(18,2) default 0 not null,
  AVGCKD20    NUMBER(18,2) default 0 not null,
  AVGCKD21    NUMBER(18,2) default 0 not null,
  AVGCKD22    NUMBER(18,2) default 0 not null,
  AVGCKD23    NUMBER(18,2) default 0 not null,
  AVGCKD24    NUMBER(18,2) default 0 not null,
  AVGCKD25    NUMBER(18,2) default 0 not null,
  AVGCKD26    NUMBER(18,2) default 0 not null,
  AVGCKD27    NUMBER(18,2) default 0 not null,
  AVGCKD28    NUMBER(18,2) default 0 not null,
  AVGCKD29    NUMBER(18,2) default 0 not null,
  AVGCKD30    NUMBER(18,2) default 0 not null,
  AVGCKD31    NUMBER(18,2) default 0 not null,
  AVGCKFLAG   VARCHAR2(1),
  AVGCKACTSTS VARCHAR2(10)
);
建立的索引如下:
-- Create/Recreate indexes 
create index AVGCUSCKBAL_TEST_IDX on AVGCUSCKBAL (AVGCKACTNO, AVGCKACTSTS, AVGCKCUSID)
  tablespace DATA_TS01
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  reverse;
  
  AVGCKCUSID 客户号
  AVGCKACTNO 账号
  AVGCKMONTH 月份
  经常要根据客户号、账号、月份进行查询、更新,大致的数据量是每月新增300万条记录。
  请问各位这个表的索引这样建立合适吗?有没有更高效的方法。
  有必要建立分区表吗?如何建?

解决方案 »

  1.   

    這個順序(AVGCKACTNO, AVGCKACTSTS, AVGCKCUSID)是賬號、月份、客戶號吧?
    數据量很大,可以考慮根據月份建立分區表了。
      

  2.   

    你建的那索引 :AVGCKACTNO, AVGCKACTSTS, AVGCKCUSID 这三个字段分别的指什么啊?是对应你说的客户号、账号、月份吗?感觉不像啊!!!!!!!!!!
      
    从你的说明来看(你的说明我感觉有问题):
    可以考虑建立分区表,建立一个以月份为依据的区间分区表就正好.  
    举个小例子:1            CREATE TABLE range_example 
    2              ( range_key_column date , 
    3              data varchar2(20) 
    4      ) 
    5      PARTITION BY RANGE (range_key_column) 
    6      ( PARTITION part_1 VALUES LESS THAN 
    7      (to_date('01/01/2005','dd/mm/yyyy')), 
    8      PARTITION part_2 VALUES LESS THAN 
    9      (to_date('01/01/2006','dd/mm/yyyy')) 
    10 ) 
    11 / 不过这应该有个前提,就是你现在的查询和更新速度很慢吗?已经超出你的预期值了吗?如果还好,那就没必要搞.
      

  3.   

    打错了,
    建立的索引应该如下:
    -- Create/Recreate indexes  
    create index AVGCUSCKBAL_TEST_IDX on AVGCUSCKBAL (AVGCKACTNO, AVGCKMONTH , AVGCKCUSID)
      tablespace DATA_TS01
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
      initial 64K
      minextents 1
      maxextents unlimited
      )
      reverse;