如何加快从日期分区的表创建表?

时间:2015-11-06 14:12:12

标签: oracle plsql

我有一张包含大量数据的表格。它按周划分。此表包含名为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分钟。这是很长一段时间,因为我必须为每个小组重复这个过程,而且我有很多小组。什么是创建表的最快方法?

2 个答案:

答案 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)执行,这些子过程可能(取决于您的里程数)减少经过的时间。