当前位置: 首页 > 面试题库 >

一次从几个分区中选择

谢高峯
2023-03-14
问题内容

请问我的英语水平。我有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自己进行分区修剪。

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

在对表进行分区的日期列上指定谓词时,Oracle可以自动确定需要访问的分区。



 类似资料:
  • 问题内容: 有没有比以下更有效的方法: 问题答案: 在查询中使用PARTITION(partitionN)语法应该非常少见。 通常,您只想为分区键指定值,并允许Oracle执行分区消除。例如,如果您的表每天根据TRANSACTION_DATE进行分区 将从今天的分区,昨天的分区和前一天的分区中选择所有数据。

  • 假设我们有一个集合(或流?) 现在我们想取两个元素并组成一对这样的一对 我们知道如何以丑陋的方式(for loop)做到这一点。 我想知道我们如何用 java 8 流做到这一点? 因为java流和反应式扩展中的方法几乎相同(两者都是单子),我认为可能有类似于RX将在2个元素到达时触发事件…

  • 我假设我可以做这样的事情,但这样会处理乐观锁情况吗(我通过表上的版本列使用它)

  • 我的数据库中有两个表。一个表包含有关用户的信息,而另一个表包含有关预订的数据。当用户进行预订时,userid将被放置在预订表中。现在,我想展示一张用户的照片,其中包括预订的备注和日期,但是照片在users表中。 这是我的两张桌子: null null

  • 问题内容: 我有一张调查答案表,类似: 并且我想创建一个查询,该查询将为我提供该表的结果摘要,从而允许我设置相关的日期范围。我下面的声明非常有效: 但是我不确定是否可以做得更好,以及在哪里添加日期范围过滤功能。 问题答案: 来自多刺的诺曼的第一个查询将给出这样的结果: 仅将几组不同的结果分组。我假设您想按问题将是/否的总数分类。在这种情况下,您必须执行以下操作: 结果:

  • 问题内容: 基本上,我有下表: 我需要在每个列中获得唯一的条目,如以下示例所示: 到目前为止,以下代码片段几乎提供了我想要的内容,但可能会返回一些值,这在当前列中不是唯一的: 也无济于事,因为它返回唯一的行,而不是其值 编辑: 选择顺序无关紧要 问题答案: 即使使用Dimitri提到的有问题的组合,这也对我有用。我不知道这对于大音量有多快 SQLFiddle当前不适用于我,这是我的测试脚本: 输出