gpt4 book ai didi

sql - 一次从多个分区中选择

转载 作者:行者123 更新时间:2023-12-02 21:45:57 24 4
gpt4 key购买 nike

请原谅我的英语。我有两个表,都按日期间隔分区,但在不同的字段上。两个表中都有大量记录(每个分区约 100kk)。第一个表将其最后 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 关于如何在一个 select 语句中从多个分区中选择数据有很多问题,但我没有找到对我的情况有用的答案。

最佳答案

在查询分区表时,您几乎不想使用 PARTITION 子句。您几乎总是希望指定一个谓词,允许 Oracle 自行进行分区修剪。

SELECT t.column1, t.column2
FROM first_table t
WHERE t.partitioned_date_column >= <<date that delimits fast partitions>>
AND t.column3 = 'someVal'

当您在表分区的日期列上指定谓词时,Oracle 可以自动确定需要访问哪些分区。

关于sql - 一次从多个分区中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com