引用分区是否适合根据引用表的内容过滤结果集?

时间:2013-11-12 20:31:23

标签: database oracle oracle11g partitioning database-partitioning

我正在使用Oracle 11g。我有一个消息表,其中包含大约十亿条记录,这些记录在时间戳上进行了范围分区。此消息表具有多个引用分区子表,例如名称,地址和标识。

所有查询都包含消息timestamp分区键。当仅在消息字段上查询消息表时,它可以正常工作,我可以从子表中提取信息,但是对于查找包含特定名称或地址或来自这些引用分区子表的其他值的消息的查询,我遇到的性能很差。

在分析这些查询并查看其计划时,我发现在访问消息表之前,它正在子表上执行完整的分区扫描。我可以通过使用前导提示并使查询以消息表开头来提高这些查询的性能,但我不想使用提示,即使使用它,性能仍然不是很好。

我现在关注的是参考分区模型可能不太适合我的需求,我需要转移到不同的分区模型。我想确认参考分区是否不是为参考表数据进行过滤而设计的。我已经阅读了很多Oracle文档,但我无法提及它,所以我仍然不确定是否可以继续进行这种代价高昂的迁移。


我希望有人知道这是否属实,并指出一些我错过的文件。但是现在我被要求提供示例查询和计划,这当然是合理的,我将不得不添加更多我遗漏的信息。除了进行范围分区之外,消息表还在varchar列上进行了子分区。

SELECT count(*) FROM EVT_TRANS_MSG A, EVT_TRANS_MSG_ID B WHERE A.TIMESTAMP_F >= '03-OCT-13 12.00.00.000000000 AM'  AND A.TIMESTAMP_F <= '03-OCT-13 11.59.59.999000000 PM' AND B.CODE = '999999999'  AND A.ID = b.message_fk AND a.object_type = 'BLAH';

执行时间:529秒(8分49秒)

Plan

SELECT /*+ LEADING(A) */ count(*) FROM EVT_TRANS_MSG A, EVT_TRANS_MSG_ID B WHERE A.TIMESTAMP_F >= '03-OCT-13 12.00.00.000000000 AM'  AND A.TIMESTAMP_F <= '03-OCT-13 11.59.59.999000000 PM' AND B.CODE = '999999999'  AND A.ID = b.message_fk AND a.object_type = 'BLAH';

执行时间:12秒

plan with hint

0 个答案:

没有答案