请问我的英语水平。我有2个表,两个表都按日期间隔分区,但是在不同的字段上。两个表中都有大量记录(每个分区中约100kk)。第一个表在快速discks表空间中保留3个最后(按日期)分区,其他表在慢速discks表空间中保持。我也有一些系统来处理数据。它并行执行进程,每个进程都通过select语句从第一个表中获取数据,并将处理后的数据放入第二个表中。因此,我只需要从“快速”(!)分区的第一个表中选择数据,即可将其放入第二个表中。但是第二张表也分区在其他(日期)字段上。当进程并行执行时,当不同的进程试图将数据放入第二张表的同一分区时,我会陷入僵局。
良好的解决方案是,每个进程仅从“快速”分区(但一次全部)中获取数据,仅从第二个表中的一个分区中获取数据。在这种情况下,每个进程都会将数据推送到一个分区中。但是我不知道该怎么做。
如果我做
select t.field1, t.field2 from (select * from FIRST_TABLE partition("P1") union all select * from FIRST_TABLE partition("P2") union all select * from FIRST_TABLE partition("P3")) t where t.field3='someVal' --Indexed field in FIRST_TABLE
OracleDB将在FIRST_TABLE的分区上使用本地索引来解决从句吗?这种方式将如何影响性能?
有什么办法可以解决我的问题吗?
PS关于如何在一个选择语句中从多个分区中选择数据有很多问题,但是我发现答案对我的情况没有帮助。
PARTITION查询分区表时,您几乎永远不想使用该子句。您几乎总是想指定一个谓词,以允许Oracle自己进行分区修剪。
PARTITION
SELECT t.column1, t.column2 FROM first_table t WHERE t.partitioned_date_column >= <<date that delimits fast partitions>> AND t.column3 = 'someVal'
在对表进行分区的日期列上指定谓词时,Oracle可以自动确定需要访问的分区。