我有一张包含大量数据的表格。它按周划分。此表包含名为group
的列。每个group
可能有多周的记录。例如:
列出商品
gr week data
1 1 10
1 2 13
1 3 5
. . 6
2 2 14
2 3 55
. . .
我想基于一个group
创建一个表。目前,Oracle 11g的创建时间约为23分钟。这是很长一段时间,因为我必须为每个小组重复这个过程,而且我有很多小组。什么是创建表的最快方法?
答案 0 :(得分:0)
创建所有表然后使用INSERT ALL WHEN http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm#i2145081
数据只能读取一次。
insert all
when gr=1 then
into tab1 values (gr, week, data)
when gr=2 then
into tab2 values (gr, week, data)
when gr=3 then
into tab3 values (gr, week, data)
select *
from big_table
答案 1 :(得分:0)
如果您不按群组复制数据并逐周处理数据,那么您可以获得最佳速度,但是您不会说出您将要达到的目标,因此无法发表评论(这方法当然可能很难或不切实际;但你至少应该考虑它。)
因此,在一些提示下如何提取组数据:
删除所有索引,因为这只会阻止空间 - 您需要做的就是一个大的 FULL TABLE SCAN
检查每组的可用空间和大小;也许你可以一次处理几个小组
部署并行查询
create table tmp as
select /*+ parallel(4) */ * from BIG_TABLE
where group_id in (..list of groupIds..);
请注意,必须在数据库中启用并行模式,如果您不确定,请询问您的DBA。重点是大型全表扫描由几个子过程(此处为4)执行,这些子过程可能(取决于您的里程数)减少经过的时间。