首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDL语句的执行时间是否取决于记录数?

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

Stack Overflow用户
提问于 2014-02-15 14:27:02
回答 1查看 233关注 0票数 1

我需要运行下面的DDL:

代码语言:javascript
复制
ALTER TABLE storage_archive MODIFY   duration   char(7);

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

如果数据库中有更多记录,此DDL语句是否会花费更多时间,或者与表中的记录数无关?由于我执行的是DDL而不是DML (Update或Delete),我的理解是它不应该依赖于表中的记录数。

在这一点上我说错了吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-15 16:15:37

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

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

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21794212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档