如何为超过 3000 万行和 250 列的表优化 Oracle 创建表功能
Posted
技术标签:
【中文标题】如何为超过 3000 万行和 250 列的表优化 Oracle 创建表功能【英文标题】:How to optimize Oracle create table function for a table having over 30 million rows and 250 columns 【发布时间】:2019-05-30 08:59:28 【问题描述】:我需要从另一个具有相同行号和大约 230 列的表中创建一个具有超过 3000 万行和大约 250 列的表。这就像ETL过程。我使用 SPSS Modeler 运行具有该过程算法的流。我需要加快这个过程。
在 IBM Netezza 中,使用 SPSS Modeler 中的数据库内缓存和用于输入和输出表的 DISTRIBUTE ON HASH
函数,此过程大约需要 20-25 分钟。
在 Oracle 中,相同的过程大约需要 1.5-2 小时。我无法优化代码。我尝试了很多方法,使用 PARALLEL 函数创建输入和输出表,尝试索引输入表,尝试分区等。
最后,我对输入和输出表使用了下面的语法,但是我无法取得任何进展。
COLUMN STORE COMPRESS FOR QUERY HIGH NO ROW LEVEL LOCKING NOLOGGING
PARTITION BY HASH ("COLUMN 1") PARALLEL 16
【问题讨论】:
我的输入表有以下属性。对不起,我不能给你列的实际名称COLUMN STORE COMPRESS FOR QUERY HIGH NO ROW LEVEL LOCKING NOLOGGING PARTITION BY HASH ("MUSTERI_NO") PARALLEL 16
哪部分占用了时间?
所以这只是同一个数据库上从一个表到另一个表的副本?通常你只需要create table table1 nologging parallel 16 as select * from table2;
,可能后面跟着alter table table1 logging noparallel;
。
【参考方案1】:
我会尝试使用散列分区和并行处理来创建新表。这里centroid article 似乎是一个很好的讨论,可以让您开始了解如何实现它。
【讨论】:
感谢您的建议。我想我已经实现了这个方法。我的输入表具有哈希分区和并行度 16。我也以相同的方式创建输出表。以上是关于如何为超过 3000 万行和 250 列的表优化 Oracle 创建表功能的主要内容,如果未能解决你的问题,请参考以下文章