2

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

4

2 回答 2

1

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

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

如果本地索引不起作用,那么查询调整可能会有所帮助。如果那没有帮助,那么您应该重新设计架构。

编辑:说了这么多,只需一项基本检查即可确保您的查询没有扫描所有分区。这可以通过将分区标准 [在您的情况下为日期] 作为 where 子句的一部分来实现。

于 2013-08-25T07:09:45.950 回答
0

间隔分区可能会有所帮助。它使分区管理变得更加容易,从而使拥有数千个分区而不是几十个或数百个分区变得合理。

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

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')
);

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

于 2013-08-26T18:05:02.150 回答