问题描述
你好AskTom团队,
通常,我们将CTAS编码为
创建表< TABLE_NAME> AS SELECT从< TABLE_NAME>位置。。
我有一个要求,我必须创建一个具有特定结构的TMP表,该结构稍后用于交换分区。这个表大约有25列,可能有几百万行数据。
我们尝试了两种选择
第1个选项(此选项比直接在表上执行INSERTAPPEND快):
1) CREATE具有所需结构的TMP表
2)插入/*+APPEND*/进入...选择
3)交换分区
第二种选择:
1)创建表作为Select ( VARCHAR2(255 ) ) col1、col2 as日期) col2、....自
2)交换分区
经过几次试验后,第二种选择似乎更快。
但我认为在数百万行上的所有列上运行“执行”仍然不是最佳的。是否有其他方法来实现或优化此功能?
谢谢!
通常,我们将CTAS编码为
创建表< TABLE_NAME> AS SELECT
我有一个要求,我必须创建一个具有特定结构的TMP表,该结构稍后用于交换分区。这个表大约有25列,可能有几百万行数据。
我们尝试了两种选择
第1个选项(此选项比直接在表上执行INSERTAPPEND快):
1) CREATE具有所需结构的TMP表
2)插入/*+APPEND*/进入
3)交换分区
第二种选择:
1)创建表作为Select ( VARCHAR2(255 ) ) col1、col2 as日期) col2、....自
2)交换分区
经过几次试验后,第二种选择似乎更快。
但我认为在数百万行上的所有列上运行“执行”仍然不是最佳的。是否有其他方法来实现或优化此功能?
谢谢!
专家解答
无论哪种情况,您都可能需要进行数据类型转换,因此,如果第二种类型转换更适合您,那么请务必使用它。
在(1)中,即使TMP具有正确的数据类型,当数据被加载到TMP时,插入-选择也会调用一个数据转换,例如,插入到(date_col)选择来自...的字符串。即使您尚未显式编码TO_DATE函数,也会进行转换。
当然,在(2)中也同样适用,只是数据转换现在在SELECT中是明确的,但是净效果将是相似的。
如果有大量重复的日期,那么标量查询缓存可能会带来一些好处,例如
在(1)中,即使TMP具有正确的数据类型,当数据被加载到TMP时,插入-选择也会调用一个数据转换,例如,插入到(date_col)选择来自...的字符串。即使您尚未显式编码TO_DATE函数,也会进行转换。
当然,在(2)中也同样适用,只是数据转换现在在SELECT中是明确的,但是净效果将是相似的。
如果有大量重复的日期,那么标量查询缓存可能会带来一些好处,例如
SQL> create table t1 ( x date ); Table created. SQL> create table t2 ( s varchar2(20)); Table created. SQL> SQL> insert /*+ APPEND */ into t2 2 select '2016-01-01' from 3 ( select 1 from dual connect by level <= 1000 ), 4 ( select 1 from dual connect by level <= 10000 ); 10000000 rows created. SQL> SQL> commit; Commit complete. SQL> SQL> set timing on SQL> insert /*+ APPEND */ into t1 select to_date(s,'yyyy-mm-dd') from t2; 10000000 rows created. Elapsed: 00:00:19.18 SQL> commit; Commit complete. SQL> drop table t1 purge; Table dropped. SQL> create table t1 ( x date ); Table created. SQL> set timing on SQL> insert /*+ APPEND */ into t1 select 2 ( select to_date(s,'yyyy-mm-dd') from dual ) 3 from t2; 10000000 rows created. Elapsed: 00:00:09.28 SQL> commit; Commit complete. SQL> SQL>
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




