【发布时间】:2015-02-18 00:19:37
【问题描述】:
我想创建一个这样的表。
create table some_data (
id number(19,0),
group_id number(19,0),
value float,
timestamp timestamp
);
对于这个表,我希望数据像这样存储
group_id=1
jan-2015
feb-2015
...
group_id=2
jan-2015
feb-2015
...
等等。所以我假设我必须为 group_id 创建一个按范围划分的分区,然后还按时间戳列的范围创建一个子分区,对吧?
所以它应该是这样的:
create table some_data (
id number(19,0),
group_id number(19,0),
value float,
timestamp timestamp
)
PARTITION BY RANGE (group_id)
SUBPARTITION BY RANGE ("TIMESTAMP")
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
PARTITION part_1 values LESS THAN (TO_DATE('01.02.2015','DD.MM.YYYY'))
);
这是对的吗?还有一个问题:有了这个分区,如果添加了新的 group_id,oracle 会自动为新的 group_id 创建一个新的分区,并为新月份的新数据创建新的分区吗?
【问题讨论】:
-
为什么要关心数据的存储方式?
-
@PlanItMichael 好吧,在这里存储的措辞可能是错误的,我想以某种方式创建分区以更快地获得查询结果,并且我认为要获得更快的查询结果,我需要将分区创建为我在上面描述过
-
不一定。如果您要查询的数据基数较低(即,跨多行仅存在几个不同的值),您可以使用位图索引。在查询多列时,它们速度极快并且运行良好。但是,它们不适用于频繁更新的表。
-
好吧,这个表有很多行(200.000.000+),每天我们有大约 200 万个新插入,我不知道我们每天删除多少行
标签: oracle partitioning