【问题标题】:Partitioning in Oracle using custom functions在 Oracle 中使用自定义函数进行分区
【发布时间】:2016-09-28 20:29:27
【问题描述】:

我正在尝试使用 ID 列对我的表进行分区,这样所有偶数 ID 都应该进入 partition_1,奇数 ID 应该进入 partition_2。唯一能满足我需求的是virtual columns

CREATE TABLE sales
(
 id       NUMBER(6) NOT NULL,
 mod_id AS (MOD(id, 2))
);
PARTITION BY RANGE (mod_id)
(
 PARTITION mod_id VALUES LESS THAN(1),
 PARTITION mod_id VALUES LESS THAN(2),
)

还有比这更好的方法吗?

【问题讨论】:

  • 应该没问题,是不是没有按预期工作?
  • 这是我第一次分区,如何知道记录所在的分区?
  • 事情还不错,但是在插入时我必须指定所有列(虚拟列除外)。
  • 这似乎是一种不寻常的分区方式。您想通过这种分区方案实现什么目标?

标签: oracle scalability partition


【解决方案1】:

当您使用 MOD 函数来计算 mod_id 时,您的列将只有 2 个值(0 和 1), 在这种情况下,您可以使用 LIST 分区,如下所示。

CREATE TABLE sales
(
 id       NUMBER(6) NOT NULL,
 mod_id AS (MOD(id, 2))
)
PARTITION BY LIST (mod_id)
      (PARTITION mod_id0 VALUES (0),
       PARTITION mod_id1 VALUES (1));

可以肯定的是,奇数 id 的记录会分区 mod_id1 甚至是 mod_id0。
您可以使用以下查询进行验证:

select * from sales partition (mod_id1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2013-08-31
    • 2017-10-21
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多