Oracle Partitioned表需要很长时间才能获取

时间:2013-08-25 06:40:39

标签: oracle oracle11g

我有一个基于oracle db中的日期的分区表,其中每个分区都有一些记录。构建前端应用程序以基于日期范围搜索数据(意味着它扫描多个分区)。在最快的时间内获取数据的最佳逻辑是什么?

2 个答案:

答案 0 :(得分:1)

您应该创建适用于分区的本地索引。 通常我们使用全局索引来处理整个表,而本地索引特定于分区,这将使分区搜索更快。

检查此链接以了解本地索引的工作方式:http://docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#i461446

如果本地索引不起作用,那么查询调优可能会有所帮助。如果这没有用,那么你就会重新设计架构。

编辑: 说了这么多,只需要进行一次基本检查,以确保您的查询不扫描所有分区。这可以通过将分区条件[在您的案例中的日期]作为where子句的一部分来实现。

答案 1 :(得分:0)

Interval partitioning可能有所帮助。它使分区管理更多 更容易,这使得有数千个分区而不是几十个或几百个是合理的。

例如,如果当前表按月分区,则一周的查询将需要读取大量额外数据。但是如果表是按天划分的 然后几乎不会扫描额外的数据。

create table partition_test(a number primary key, b date)
partition by range (b) interval (interval '1' day)
(
    partition p1 values less than (date '2000-01-01')
);

但即使这会将每个分区的数据从crores减少到10万,这仍然是应用程序的大量数据。正如@loki建议的那样,本地索引可能有所帮助。

相关问题