对比上次MySQL的DDL

    MySQL的DDL未必都是可以快速完成的,那么Oracle同等场景下如何?

    这个是在Oracle19C下的实验,特别说明。因为在Oracle11G下有些结论是不成立的。

    表thousand有大约4000万行记录
    

    SQL> set timing on;

    SQL> desc thousand;
    Name Type Nullable Default Comments
---- ------------ -------- ------- --------
    ID INTEGER Y
    A INTEGER Y
   NAME VARCHAR2(10) Y
   TIME DATE Y sysdate

SQL> select count(*) from thousand;

COUNT(*)
----------
40000000

Executed in 0.69 seconds

    可以看出和之前MySQL实验的的表结构几乎一模一样。数据量是MySQL的4倍。

   下面对这个进行增加字段的DDL。


SQL> alter table thousand add address varchar2(100);

Table altered


Executed in 0.098 seconds
   

    98毫秒完成。这个命令在11G是不可能这么快的。

    再对这个表进行增加字段的DDL,带有默认值和非空约束。
   

SQL> alter table thousand add status varchar2(20) default '0' not null;

Table altered


Executed in 0.092 seconds

   92毫秒完成。这个命令在11G是也是同样效果。再对这个表进行增加字段带有默认值。
    
     

SQL> alter table thousand add QQ varchar2(10) default '0';

Table altered


Executed in 0.022 seconds


     22毫秒完成。这个命令在11G是不可能这么快的。

     接下来要进行扩字段,直接从10长度扩大到70.


SQL> alter table thousand modify name varchar2(70);

Table altered


Executed in 0.061 seconds


    61毫秒完成。这个命令在11G是不可能这么快的。而且也没有MySQL的超够64就会重新构建的问题。



SQL> desc thousand;
Name Type Nullable Default Comments
------- ------------- -------- ------- --------
ID INTEGER Y
A INTEGER Y
NAME VARCHAR2(70) Y
TIME DATE Y sysdate
ADDRESS VARCHAR2(100) Y
STATUS VARCHAR2(20) '0'
QQ VARCHAR2(10) Y '0'

    那么从70再次扩展到更大的长度会如何?               

SQL> alter table thousand modify name varchar2(200);

Table altered


Executed in 0.021 seconds

   21毫秒完成。



SQL> desc thousand;
Name Type Nullable Default Comments
------- ------------- -------- ------- --------
ID INTEGER Y
A INTEGER Y
NAME VARCHAR2(200) Y
TIME DATE Y sysdate
ADDRESS VARCHAR2(100) Y
STATUS VARCHAR2(20) '0'
QQ VARCHAR2(10) Y '0'

    尝试一下缩字段长度的DDL。这个在MySQL中会较为漫长。               

SQL> alter table thousand modify address varchar2(50);

Table altered


Executed in 1.614 seconds


    1.6秒完成。虽然没有毫秒那么快,但是的确也不慢。

    再次扩大长度和缩小长度。

SQL> alter table thousand modify address varchar2(500);

Table altered


Executed in 0.015 seconds


SQL> alter table thousand modify address varchar2(120);

Table altered


Executed in 1.544 seconds

    比较稳定的都是不到20毫秒的扩容和1.5秒左右的缩容。

    这些都是19C版本带来的。

   之所以要讲这个主要是有时候开发人员问这个操作会执行多久?(担心锁表时间),我第一句话就问?什么版本?如果19C,那么基本不用担心。

SQL> 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值