有一张表,表结构如下:
-- 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万条记录。
请问各位这个表的索引这样建立合适吗?有没有更高效的方法。
有必要建立分区表吗?如何建?
-- 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 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 / 不过这应该有个前提,就是你现在的查询和更新速度很慢吗?已经超出你的预期值了吗?如果还好,那就没必要搞.
建立的索引应该如下:
-- 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;