数据库字段定义尽量不要为默认空,但是为了满足产品需求和减少开发量,所以直接将字段改为默认空。但是一样的修改SQL修改同一张表的两个Not Null字段其中一个1秒内完成;另外一个执行了1分钟都没有执行完。鉴于执行时间太慢和最近升级了数据库版本为8.0,所以中止执行,创建测试表验证SQL是否有问题。
ALTER TABLE test_table_define MODIFY COLUMN type_name tinyint(1) DEFAULT NULL COMMENT 'Not Null Alter Null Test';
test_table_define:表名;type_name:字段名。
CREATE TABLE test_table_define ( id int(11) NOT NULL AUTO_INCREMENT, type_name tinyint(4) DEFAULT 1 COMMENT 'Not Null Alter Null Test', remark_ varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE = INNODB, CHARACTER SET utf8, COLLATE utf8_general_ci, COMMENT = '测试表定义问题';
INSERT INTO test_table_define (remark_) VALUES ('测试字段默认非空,用SQL改为默认空!'), ('测试字段默认非空,用SQL改为默认空!');
CREATE TABLE test_table_define ( id int NOT NULL AUTO_INCREMENT, type_name tinyint DEFAULT NULL COMMENT 'Not Null Alter Null Test', remark_ varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE = INNODB, CHARACTER SET utf8, COLLATE utf8_general_ci, COMMENT = '测试表定义问题';
所以,DML脚本是正确,版本升级之后没有其他帖子说的增加了限制不允许Not Null改为Null。
找了一张表数据333105修改两个字段默认空,执行相同的DML脚本结果分别是:SQL.sql: DML succeeded [0.459s],SQL.sql: DML succeeded [51.836s]。所以是数据量影响了DML执行时间。
MODIFY COLUMN底层做了什么事情,那么慢?
同一张表数据量都是333105,都是MODIFY,为什么一个字段只需0.4S,另一个却需要51.836S?