我有一个现有的表格,其中有两列ID&名称。该表有大约1000万条目。我想在此电子邮件表中再添加一列。这个新列不能用作任何类型的键,所以这是简单的varchar(30)。我也不想要这个字段的默认值。
ALTER TABLE users
添加栏email
VARCHAR(45);
我想知道改变这张桌需要多长时间。这会对所有1000万条目设置为NULL,因为如果这样做会花费很多时间。
答案 0 :(得分:0)
是否需要花费很多时间。
您可能希望做一些类似的事情,这通常会更快:
CREATE TABLE users_new LIKE users;
ALTER TABLE users_new ADD COLUMN email varchar(45);
INSERT INTO users_new (fields_in_users_table) SELECT * FROM users;
RENAME TABLE users TO users_old, users_new TO users;
DROP TABLE users_old;
答案 1 :(得分:0)
http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html
指出5.6可以添加一列INPLACE
,但在您的情况下可能无关紧要。
如果您没有5.6,则必须复制整个表格才能获得ADD COLUMN
。
仍然......你问题的答案取决于"更快"的含义。我认为这意味着"最大限度地减少我不能写入表格的时间"。
让我们看看3种方法(5.6之前):
ALTER TABLE
- 在完成之前无法写入表。不快。TRIGGER
以使users_new
始终保持最新状态。底线:5.6 ALGORITHM=INPLACE
或pt-online-schema-change
。