对不起我的英语。我有 2 个表,都按日期间隔分区,但在不同的字段上。两个表中都有大量记录(每个分区约 100 kk)。第一个表将它的 3 个最后(按日期)分区保留在快速磁盘表空间中,其他分区在慢速磁盘表空间中。我也有一些处理数据的系统。它并行执行进程,每个进程通过 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 中的分区上使用本地索引来解决 where 子句吗?这种方式将如何影响性能?
有什么想法可以解决我的问题吗?
PS关于如何在一个选择语句中从多个分区中选择数据有很多问题,但我没有找到对我的情况有用的答案。