DDL 语句执行时间是否取决于记录数



我需要运行下面的DDL:

ALTER TABLE storage_archive MODIFY   duration   char(7);

目前该列char(5),表中有近一万亿条记录。

如果数据库中的记录较多,此 DDL 语句是否需要更多时间,或者是否与表中的记录数无关?由于我正在执行DDL而不是DML(更新或删除),我的理解是它不应该依赖于表中的记录数。

我在这一点上错了吗?

答案取决于您执行哪种 ALTER。如果 ALTER 仅更改 Oracle 元数据(例如,将可为 null 的列添加到表或在 novalidate 模式下添加约束或设置未使用的列),则不依赖于用户数据量。如果您移动表或删除列或收缩表(执行需要请求或操作数据的操作),则取决于用户数据量。您需要查阅 Oracle 文档并了解 Oracle 在特定情况下的作用。

您的特定情况将涉及块中的数据,因为 Oracle 需要在现有数据中添加 2 个尾随空格,并且执行时间可能很长。这是使用 varchar2 支持 char 的众多原因之一:

SQL> create table t (x char(10));
Time spent: 00:00:00.04
SQL> insert /*+ append */ into t select 'x' from dual connect by level <= 1000000;
Time spent: 00:00:01.17
SQL> commit;
Time spent: 00:00:00.04
SQL> alter table t modify (x char(20));
Time spent: 00:00:52.85
SQL> drop table t;
Time spent: 00:00:02.54
SQL> create table t (x varchar2(10));
Time spent: 00:00:00.07
SQL> insert /*+ append */ into t select 'x' from dual connect by level <= 1000000;
Time spent: 00:00:01.27
SQL> commit;
Time spent: 00:00:00.05
SQL> alter table t modify (x varchar2(20));
Time spent: 00:00:00.07

最新更新