问题 如何在多个分区上进行SQL选择?


有没有比以下更有效的方式:

select * from transactions partition( partition1 ) 
union all 
select * from transactions partition( partition2 ) 
union all 
select * from transactions partition( partition3 ); 

11037
2017-11-24 14:57


起源

在这种情况下,效率意味着什么?减少打字?结果更快? - EvilTeach
结果更快。 - Yusufk


答案:


在查询中使用PARTITION(partitionN)语法应该非常罕见。

您通常只想指定分区键的值,并允许Oracle执行分区消除。例如,如果您的表每天基于TRANSACTION_DATE进行分区

SELECT *
  FROM transactions
 WHERE transaction_date IN (date '2010-11-22', 
                            date '2010-11-23', 
                            date '2010-11-24')

将从今天的分区,昨天的分区和分区的前一天选择所有数据。


14
2017-11-24 15:04



好吧,我不确定Oracle是否会将搜索限制在相关分区上,这是有意义的。我有一个巨大的表,每小时分区,我需要查询跨越数天的数据。谢谢 - Yusufk


你能提供额外的背景吗?你的谓词是什么?是什么让你认为你需要明确告诉优化器反对多个分区。例如,您可能使用了错误的分区键。


-1
2017-11-24 15:17