我有一個MySQL表看起來像這樣:MySQL的:對InnoDB表的每個索引需要較長時間才能創造出比過去的
CREATE TABLE my_facts (
`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,
`account_id` int(11) NOT NULL,
`asked_on` date NOT NULL,
`foo_id` int(11) NOT NULL,
`bar_id` int(11) NOT NULL,
`baz_id` int(11) NOT NULL,
`corge_id` int(11) NOT NULL,
`grault_id` int(11) NOT NULL,
`flob_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL)
ENGINE=InnoDB;
,並具有450K行。但我想幾個指標添加到它:
CREATE INDEX `k_account_foo_id` ON `my_facts` (`account_id`, `asked_on`, `foo_id`, `tag_id`);
CREATE INDEX `k_account_bar_id` ON `my_facts` (`account_id`, `asked_on`, `bar_id`, `tag_id`);
CREATE INDEX `k_account_baz_id` ON `my_facts` (`account_id`, `asked_on`, `baz_id`, `tag_id`);
CREATE INDEX `k_account_corge_id` ON `my_facts` (`account_id`, `asked_on`, `corge_id`, `tag_id`);
CREATE INDEX `k_account_grault_id` ON `my_facts` (`account_id`, `asked_on`, `grault_id`, `tag_id`);
我的問題是,每個指標需要更長的時間來創造出比過去的 - 這似乎是一個幾何軌跡。爲了創建索引,需要11.6s,28.8s,44.4s,76s和128s。我想添加更多的索引。
當我創建表爲MyISAM時,不僅整個過程快得多,創建每個後續索引所需的時間可能比先前的索引長一秒。
什麼給?預期這種行爲?我在創建索引時做了些有趣的事情嗎?
爲了什麼是值得的,我在這個測試中使用了MySQL 5.1.48/OS X 10.6.8。
啊,謝謝!現在完全合理。所以,最好是創建表,添加鍵,禁用鍵,插入數據,然後重新啓用鍵? – Nate
我不知道什麼是最快的,但我只是創建一個新的表,其中包含所有您想要的索引,並將所有行復制到「INSERT INTO ... SELECT」查詢中,然後重命名。 –