我有下表:
CREATE TABLE IF NOT EXISTS PDF_STORAGE (
ID_PDF_STORAGE bigint(20) NOT NULL AUTO_INCREMENT,
DESC_FILE varchar(255) DEFAULT NULL,
PDF_FILE longblob,
LINK_FILE varchar(255) DEFAULT NULL,
VERSION int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (ID_PDF_STORAGE)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;其中PDF_FILE是一个平均10 MB的文件。今天,它大约有50.000排。我需要在这个表中添加一个新的列,但是它需要很长的时间,超过10分钟,有时在PhpMyAdmin中出现401错误,所以我想知道实现这个错误的正确方法是什么…
我已经试过了
ALTER TABLE PDF_STORAGE ADD VERSION INT NOT NULL DEFAULT '0' AFTER LINK_FILE ;和
SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE PDF_STORAGE_new LIKE PDF_STORAGE;
ALTER TABLE PDF_STORAGE_new ADD VERSION INT NOT NULL DEFAULT '0' AFTER LINK_FILE ;
INSERT INTO PDF_STORAGE_new (PDF_STORAGE, DESC_FILE, ID_PDF_STORAGE, LINK_FILE) SELECT * FROM PDF_STORAGE;
RENAME TABLE PDF_STORAGE TO PDF_STORAGE_old, PDF_STORAGE_new TO PDF_STORAGE;
DROP TABLE PDF_STORAGE_old;
SET FOREIGN_KEY_CHECKS = 1;但他们也很慢..。有更好的办法吗?
谢谢
发布于 2015-08-31 15:15:57
您现在所做的ALTER TABLE是了解我知识的最佳方法。当没有多少事务(或) DB操作时,您可以尝试进行此更改。我是说,在空闲时间做些改变。
ALTER TABLE PDF_STORAGE ADD VERSION INT NOT NULL DEFAULT '0' AFTER LINK_FILE ;您还可以创建一个与此表模式相同的新表以及新列。
将此表中的所有记录插入新创建的表中。
将新表重命名为旧表名。
删除旧表。
https://stackoverflow.com/questions/32314159
复制相似问题