我有一个基于oracle db中的日期的分区表,其中每个分区都有一些记录。构建前端应用程序以基于日期范围搜索数据(意味着它扫描多个分区)。在最快的时间内获取数据的最佳逻辑是什么?
答案 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建议的那样,本地索引可能有所帮助。