我试图优化我的查询,但是当我尝试使用此查询增加一些指标: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