如何为超过 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 创建表功能的主要内容,如果未能解决你的问题,请参考以下文章

html 具有固定行和列的表

使用 django html 模板创建具有动态行和列的表

如何为 Sql Server 列的默认绑定使用参数化函数

如何从包含日期时间列的表中获取某些行和“先前”行?

如何为Dataframe一列分配不同的数字[重复]

如何在处理列的其余部分时将导致错误的数据插入到单独的文件中?