oracle数据库建表分区
devices 按天的分析数据的数据比较大,所以在数据库存贮中,需要做到几点优化。
1. 为节省存贮,事实表中所有字段存取的是number类型。
2. kettle 的转化过程中,因为转化的维度比较多,转化过程比较慢,每秒才转换150条左右。所以采取了先将数据导入数据库中然后能过存储过程的方式,在数据库中内部转换。
3. 事实表的建表中,采取了按月数据分区。由于每天的数据一般在12-13万条左右,一个月数据在 370万左右。分区可增强可用性,维护方便,均衡I/O,改善查询性能.
由于在数据库存取中并无日期字段,而是采用yyyyMMdd 的数字字段的方式存取。在自动分区中 感觉并不太好按月来进行自动分区, 以下是我采用的分区代码按月进行分区。
create table DEVICE_USEAGE_FACT (
date_id number,
pn_id date,
......
)
partition by range (date_id)
INTERVAL (100)
(
partition p090101 values less than (20120201)
);
-- 以100作为一个段,当转换一个月时,数据级就换一个百位级,形成按月分区的形式创建分区。
4. 为每一个维度字段建设立索引,由于建设立了分区,只能使用 普通索引, 不能使用位图索引.