Mysql 在大表上添加索引需要花费很长时间
我有一个名为Mysql 在大表上添加索引需要花费很长时间,mysql,indexing,Mysql,Indexing,我有一个名为unused的表(在MySQL中),大约有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
unused
的表(在MySQL中),大约有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性能以及可以提供多少ram 以下是一些参考资料以获取更多信息