2011-08-18 157 views
2

我用來處理Myisam表,但對於外部連接,我更改爲Innodb表(轉換並添加外鍵)。我經常從服務器下載數據庫,並用它填充本地主機。當它是myisam桌子時,它過去就像地獄一樣快。但現在它需要超過30分鐘......我知道它必須在插入記錄之前進行檢查,但我禁用了外鍵檢查。它的一些行:恢復InnoDB表格:非常非常慢?

SET FOREIGN_KEY_CHECKS=0; 
DROP TABLE IF EXISTS t1; 
CREATE TABLE `t1` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME` varchar(255) NOT NULL default '', PRIMARY KEY (`ID`), UNIQUE KEY `Index_2` (`NAME`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 
TRUNCATE TABLE t1; 

drop/create/truncate all tables。然後INSERT,INSERT ...如何使其更快?

回答

2

假設您使用mysqldump,請使用--extended-insert。這將把多行插入組合成一個語句。

另請嘗試--disable-keys選項。這不僅會禁用外鍵檢查,還會禁止更新索引,直到插入所有行。一次更新索引通常要快得多。

如果您不使用mysqldump,則可以在轉儲之前執行ALTER TABLE table_name DISABLE KEYS;,並在每個表的轉儲之後執行ALTER TABLE table_name ENABLE KEYS;

但是,您可能會發現數據庫引擎特定的備份工具會更快。嘗試XtraBackup

+0

我自己的代碼,沒有任何外部的東西:)好吧我試試 – user893856

+0

如果你所做的只是傾銷本地數據庫的副本,我強烈建議不要構建自己的工具。有很多現有的工具。 –

+0

這是否有幫助取決於索引的複雜程度。在某些情況下,它不會有所作爲。我強烈推薦XtraBackup。備份過程和恢復過程主要是複製文件(用一些魔術來確保數據是一致的),而不是運行大量的SQL。 –