如果我有一个1000行的表A,和一个结构相同的表B,但这次有1000000行,那么对表B执行ALTER TABLE(例如添加两个新列)需要更长的时间吗?如果是这样的话,它会根据有多少行而按比例延长吗?除此之外,如果ALTER TABLE语句不只是添加新列,如果它改变了现有列的结构呢?这基本上归结为MySQL如何在低级别存储数据,这不是我所熟悉的。
nhhxz33t1#
追加时可以立即删除列,或者在10.4+中,如果alter_algorithm='INSTANT'可以添加到任何地方,与正常存储不同(具有存储后果)。其他操作,有些是可能的,文件是广泛的。您可以使用以下工具进行测试:
alter_algorithm='INSTANT'
SET STATEMENT alter_algorithm='INSTANT' FOR ALTER TABLE tab MODIFY COLUMN c int;
如果它不能立即完成,它就会出错。ref:MariaDB KB InnoDB online
0dxa2lsx2#
是的,它需要更长的时间:由于它需要检查每一行,如果被修改的列接受该行的内容,那么一个行数更大的表,将需要更长的时间来处理。查看手册将给予更多关于Alter的细节
2条答案
按热度按时间nhhxz33t1#
追加时可以立即删除列,或者在10.4+中,如果
alter_algorithm='INSTANT'
可以添加到任何地方,与正常存储不同(具有存储后果)。其他操作,有些是可能的,文件是广泛的。您可以使用以下工具进行测试:
如果它不能立即完成,它就会出错。
ref:MariaDB KB InnoDB online
0dxa2lsx2#
是的,它需要更长的时间:
由于它需要检查每一行,如果被修改的列接受该行的内容,那么一个行数更大的表,将需要更长的时间来处理。
查看手册将给予更多关于Alter的细节