在oracle 10g中使用表分区

时间:2012-06-14 06:58:39

标签: performance oracle plsql oracle10g

我读过几篇关于桌子分区的文章,但我仍然对它的用途感到困惑。 我的情况如下。

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

表TA包含许多列,包括日期字段,另一个关键列是项目#,它是varchar。

现在我可以选择在日期字段上分配表格TA。

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

类似qry包含项目#也在“WHERE”condion中带有“IN”子句,即我必须通过“IN”子句给出N个项目#作为输入。

现在建议我该怎么办?

2 个答案:

答案 0 :(得分:2)

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

步骤0)在日期删除全局索引,您不需要分区。

步骤1)创建每日分区

步骤2)在项目

上创建辅助分区本地索引

如果我误解了您,并且您没有阅读完整的每日分区,只读取其中的部分内容,那么请将您的架构保留原样。

答案 1 :(得分:1)

  

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

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

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