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



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

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

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

如果本地索引不起作用,那么查询调优可能会有所帮助。若那个并没有帮助,那个么你们应该重新设计模式。

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

间隔分区可能会有所帮助。它使分区管理变得非常重要更容易,这样就可以合理地拥有数千个分区,而不是几十个或数百个。

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

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所建议的那样,本地索引可能会有所帮助。

最新更新