在大表上添加索引需要永远

时间:2011-01-04 16:41:41

标签: 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 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万行,但似乎不需要花费一个多小时才能运行这类东西。但也许这是正常的。我真的不知道自己在做什么。有人可以开导我吗?

1 个答案:

答案 0 :(得分:15)

这取决于您的服务器规格。 MySQL创建索引的方式是通过表,然后排序和添加索引。这意味着它需要重新编写所有数据,然后对所有数据进行排序(无论如何都不便宜)。这取决于您的服务器的I / O性能以及您可以提供多少内存。

以下是一些资源以获取更多信息......