我有一个包含三列的大表,如下所示:
"START_DATE" DATE,
"START_VALUE" NUMBER(10,7)
"START_DATE_VALUE" NUMBER(18,7)
GENERATED ALWAYS AS
(
(extract(YEAR FROM START_DATE) * 10000 +
extract(MONTH FROM START_DATE)*100 +
extract(DAY FROM START_DATE))*power(10,3) +
(START_VALUE+180)
) VIRTUAL
Run Code Online (Sandbox Code Playgroud)
该START_DATE_VALUE
列是用于分区的虚拟列。但是,当我有这样的查询时:
select *
from mytable
where
start_date > to_date('02-01-2012', 'MM-DD-YYYY')
and start_value > 120.23452
Run Code Online (Sandbox Code Playgroud)
它扫描所有分区以获取结果。如何让 Oracle 使用虚拟列,然后选择正确的分区来处理它?
抱歉,我的表定义非常大,我无法将其复制到此处。
我有一个需要重新分区的大型 Oracle 表。我想知道有没有一种方法可以知道我有足够的空间来使用新分区创建此表的副本并将新分区与旧分区交换。