oracle多个哈希分区并行?

时间:2017-08-15 13:54:01

标签: sql oracle hash partition

我有一个非常庞大的表使用哈希分区:

create table test
 (
      custid              VARCHAR2 (16) NOT NULL
      ,channel                NUMBER(10)
      ,agent_id             CHAR(8)
      ,TIMESTAMP           DATE
 ) cache
PARTITION BY HASH(agent_id)
(
partition e1  tablespace TD_RTDM,
partition e12 tablespace TD_RTDM,
partition e13 tablespace TD_RTDM,
partition e14 tablespace TD_RTDM,
partition e15 tablespace TD_RTDM,
partition e16 tablespace TD_RTDM,
partition e17 tablespace TD_RTDM,
partition e18 tablespace TD_RTDM
);

当我在agent_id上过滤时,这非常好用。 现在我有一个我需要过滤的新级别,其中不包括agent_id。所以我想我需要n个新的并行哈希分区,如下所示:

create table test
     (
          custid             VARCHAR2 (16) NOT NULL
          ,channel               NUMBER(10)
          ,agent_id            CHAR(8)
          ,TIMESTAMP           DATE
     ) cache
PARTITION BY HASH(agent_id)
(
partition e1  tablespace TD_RTDM,
partition e12 tablespace TD_RTDM,
partition e13 tablespace TD_RTDM,
partition e14 tablespace TD_RTDM,
partition e15 tablespace TD_RTDM,
partition e16 tablespace TD_RTDM,
partition e17 tablespace TD_RTDM,
partition e18 tablespace TD_RTDM
)
PARTITION BY HASH(channel)
(
partition e1  tablespace TD_RTDM,
partition e12 tablespace TD_RTDM,
partition e13 tablespace TD_RTDM
);

但这不起作用,因为它显然不允许有多个分区语句。我用谷歌搜索并发现很多使用子分区的例子,但我认为这不是我需要的。

你有什么想法,如何调整表以获得两个查询的性能?谢谢你。

1 个答案:

答案 0 :(得分:0)

分区不一定是表演活动。

分区提供数据管理优势,允许我们通过分区交换加载数据子集或通过删除分区来删除它们。

如果我们将分区分布在多个表空间中,

分区还为我们提供了高可用性选项。

现在,分区可以通过分区修剪或删除来提高某些查询的性能,但仅适用于与分区键对齐的查询。其他查询,与我们的分区策略不一致的查询将执行中立或有时比未分区表更糟糕。

这是因为分区是表数据的物理组织。行按分区键顺序分组。显然,数据不能同时按两个不同的顺序排序,这就是你不能拥有并行分区键的原因。

没有简单的解决方法。关于CHANNEL的全局索引可能有所帮助,因为它们忽略了分区键,但它们带有自己的负担;有些地方禁止使用全局索引。分区可以回答,但前提是密钥中的密钥才有意义。使用新的分区方案重建表在理论上是可行的,但在现实生活中几乎从未完成。尝试跳出框框思考:也许一个单独的表(可能是索引组织的)可能会有所帮助?也许可能从这个不同的密钥中受益的查询很少运行,因此不值得调整。

简而言之,您需要了解数据及其用例。