我試圖優化我的查詢,但是當我嘗試使用此查詢增加一些指標:ADD INDEX崩潰的MySQL
ALTER TABLE `user` ADD INDEX `last_activity_date` (`last_activity_date`);
...崩潰我的MySQL服務器。我的意思是我的網站不再回應,我的查詢也沒有執行。我唯一的解決方案是重新啓動MySQL。這真的很煩人,因爲我有一個應用程序,數百名用戶顯然無法在崩潰時使用它。
我有一個MySQL日誌文件,但我沒有看到它的任何錯誤。你認爲這裏有什麼問題?難道是因爲有些用戶在添加索引時正在與數據庫交互?我使用InnoDB。
我有超過100.000記錄在user表看起來像:
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`encrypt_id` varchar(255) DEFAULT NULL,
`register_date` datetime DEFAULT NULL,
`last_login_date` datetime DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`banned` int(11) DEFAULT NULL,
`banned_reason` text,
`first_step_form` int(11) DEFAULT '0',
`status` int(11) DEFAULT NULL,
`referer` varchar(255) DEFAULT NULL,
`rank` int(11) DEFAULT NULL,
`fb_id` bigint(20) DEFAULT NULL,
`last_activity_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `last_activity_date` (`last_activity_date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
你可以發佈更多的信息,比如'user'表中的記錄數......一個SHOW CREATE TABLE就像'user''''語句嗎? – cerd 2015-03-31 19:50:27
[在沒有表鎖定的情況下在一個巨大的mysql生產表上創建索引]的可能的重複(http://stackoverflow.com/questions/4244685/create-an-index-on-a-huge-mysql-production-table-without -table-locking) – 2015-03-31 19:52:12
你是如何確定mysql崩潰的?你確定它不只是創建索引?用一張足夠大的表創建索引可能不僅僅是一眨眼的工作 - 我想我已經看到索引創建時間超過了30秒,所以我想它可能會更進一步。 – Kritner 2015-03-31 19:52:23