我有一个表(在 MySQL 中)名为unused
大约有 540 万行。该表如下所示:
CREATE TABLE `unused` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`account_id` bigint(20) DEFAULT NULL,
`heading_label` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `fk_account_id` (`account_id`),
CONSTRAINT `unused_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `account` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=80524905 DEFAULT CHARSET=latin1
我认为如果我添加索引,对该表的查询可能会更快。我尝试运行这个:
create index heading_label
on unused (heading_label) using btree
在重新启动 MySQL 之前,我让这个命令运行大约一两个小时。尽管这个表有超过 500 万行,但运行此类事情似乎不应该花费一个多小时。但也许这很正常。我真的不知道自己在做什么。有人可以启发我吗?
这很正常,具体取决于您的服务器规格。 MySQL创建索引的方式是先对表进行排序,然后添加索引。这意味着它需要重新写入所有数据,然后对所有数据进行排序(无论如何都不便宜)。这取决于您的服务器的 I/O 性能以及您可以为其提供多少内存。
以下是一些获取更多信息的资源...
- MySQL 错误报告 http://bugs.mysql.com/bug.php?id=9544
- 另一个 MySQL 错误报告 - 有一个很好的建议 http://bugs.mysql.com/bug.php?id=24495
- 包含一些有用信息的论坛主题 http://forums.devshed.com/mysql-help-4/slow-to-add-an-index-186951.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)