如果没有进行更改,则修改列的MySQL性能命中

imzjd6km  于 4个月前  发布在  Mysql
关注(0)|答案(1)|浏览(67)

我有很多巨大的MySQL表(数以亿计的条目)。它们都有一个名为“x”的字段,需要有NOT NULL约束。其中一些已经有约束,而另一些没有。我生成了一个脚本,它为每个表修改它,不管它是否已经有约束。我的问题是,如果我执行下面的语句,并且表已经有了约束,是否会有任何性能影响?

ALTER TABLE `my_table` MODIFY COLUMN `x` datetime(3) NOT NULL;

字符串
P.S.我没有直接访问这些表,所以我无法做一个测试查询,看看需要多长时间。

t30tvxxf

t30tvxxf1#

https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html说:
当保持相同的数据类型和[NOT] NULL属性,仅更改列名时,操作始终可以在线执行。
我对此进行了测试,创建了一个表,将x定义为可空列,并填充了200万行。
我试过你的ALTER TABLE:

ALTER TABLE `my_table` MODIFY COLUMN `x` datetime(3) NOT NULL
--------------

Query OK, 0 rows affected (2.30 sec)

字符串
这表明它花了2.3秒。
然后我再次运行相同的更改,在一个已经定义为NOT NULL的列上:

ALTER TABLE `my_table` MODIFY COLUMN `x` datetime(3) NOT NULL
--------------

Query OK, 0 rows affected (0.01 sec)


这要快得多,表明它能够检测到不需要改变。
我可以重新测试,并在将其更改为可空和不可空之间交替。每次更改都需要几秒钟。每次不更改都不需要时间。

相关问题