在 oracle 10g 中使用表分区

Posted

技术标签:

【中文标题】在 oracle 10g 中使用表分区【英文标题】:Using Table partitioning in oracle 10g 【发布时间】:2012-06-14 06:58:38 【问题描述】:

我已经阅读了几篇关于表分区的文章,但我仍然对它的用途感到有些困惑。 我的情况如下。

我有一个包含大约 1000 万条记录的大表 TA,每天加载 30-40K 条记录。

表 TA 包含许多列,包括日期字段,还有一个关键列是 project#,它是 varchar。

现在我可以选择在日期字段上对表 TA 进行分区。

但是,如果我主要查看我的查询,我将仅获取一个日期的数据,并且由于日期字段已编入索引,因此数据获取不是一个大问题。

类似的 qry 在“WHERE”条件下也包含带有“IN”子句的项目#,即我必须通过“IN”子句提供 N 个项目#作为输入。

现在建议我应该如何进行。

【问题讨论】:

“similary qry”是否也包括日期? yes.. Mario same qry 包含日期和项目#。 日期字段是当前日期吗? 是的日期字段是每天完成的报告上传日期... 这些文章中是否提到过分区是一个选项,也就是说,是企业版许可证的额外收费? 【参考方案1】:

如果您总是阅读完整的每日数据,请执行以下操作:

第 0 步)删除日期上的全局索引,分区时不需要它。

第 1 步)创建每日分区

步骤2)在项目上创建二级分区本地索引

如果我误解了你,而你不会阅读完整的每日分区,只是其中的一部分,那么保持你的架构不变。

【讨论】:

【参考方案2】:

在 ta(upload_date, project#) compress 1 上创建索引 ta_idx;

多列压缩索引可能就足够了。由于添加行时upload_date 不会发生太大变化,因此clustering factor 将保持非常低。而如果重复值很多,压缩upload_date可以节省很多空间。这可能是一个非常有效的索引。

您当然可以通过添加分区来提高效率,但这样做可能不值得。分区非常有用,但也可能非常棘手。 如果这是您计划使用分区的唯一地方,我会避免使用它。 (除非您想以此为借口了解有关分区的更多信息。)

【讨论】:

以上是关于在 oracle 10g 中使用表分区的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g 新特性:自动创建分区(Interval Partition)

oracle修改表的表空间

Oracle 11g新特性 Interval Partition

Oracle中分区表中表空间属性

oracle 大表时间分区

Oracle数据库分区表操作方法