首页 > 解决方案 > Oracle:相对日期和日期分区表

问题描述

我在 Oracle 中有一个按DATETIME列划分的每月分区表。该表包含 > 60 亿行。现在我想使用过滤这个表sysdate。因此,我可以使用相对日期编写查询,例如昨天、上一个工作日、去年等......

所以,我要寻找的是类似于下面的代码:

SELECT *
FROM BIG_PART_TABLE PARTITION FOR (DATE **TODAY**)
WHERE TRUNC(DATETIMECOLUMN) = TRUNC(SYSDATE)

但显然,这行不通。

你有什么想法让我可以让它工作吗?

谢谢!

标签: sqloracledatequery-optimizationdatabase-partitioning

解决方案


您无法可靠地判断 Oracle 需要查看哪个分区,因为sysdate它是一个可变函数(即,它的值不会随时间变化)。与其为此编写复杂的动态代码,您可能应该首先相信数据库会选择正确的分区。

我将您的查询表述如下:

select *
from big_part_table partition 
where datetimecolumn >= trunc(sysdate) and datetimecolumn < trunc(sysdate) + 1

where条件在功能上等同于您的原始条件,它为数据库提供了一个合理的机会来评估应该使用哪个分区。


推荐阅读