在 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)