我正在创建几十个表作为 CREATE TABLE AS SELECT (CTAS)。SELECT 语句的唯一区别是在 WHERE 子句中为 TEAM_ID 指定不同的值。我是 Oracle 新手,我认为我可以使用绑定变量来加快进程,但 DDL 语句中不允许使用这些变量。
我的数据非常大 - 500+ 百万行。
我最好的速度选择是什么?目前我们正在使用nologging
CREATE TABLE 语句。/*+ append */
使用提示和绑定变量显式创建表和 INSERT 会更好吗?或者是否nologging
超过绑定变量的收益?
(我确信这是一个“取决于”的场景,但我什至不知道它取决于什么......)
用于
execute immediate
更轻松地创建许多非常相似的表。一个小 PL/SQL 演示:
create table 语句可以包含您想要的任何内容 - 上面只是表明该语句可以是动态的。因此,在您的情况下,您将有简单的逻辑来更改
TEAM_ID
每个语句的表名。除非您多次执行相同的单个查询(为了这个答案而极其简化),否则绑定变量不会提供任何收益 - 在这种情况下,您正在执行许多执行大型批量插入的不同查询。
NOLOGGING
如果这是一个生产系统,则不建议使用创建表。另请注意,不记录并/*+APPEND*/
可能具有备份/恢复影响。这个Ask Tom线程可能特别有趣。澄清一下,使用 CTAS 是可行的方法。您只需解析一次 CTAS 语句即可插入数百万行。如果您使用单独的 INSERT 语句,则必须一遍又一遍地解析每个语句,这会增加大量开销!