Добавление индекса на большую таблицу занимает навсегда

У меня есть таблица (в MySQL) под названием unused с примерно 5,4 миллионами строк. Таблица выглядит так:

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. Несмотря на то, что эта таблица имеет более 5 миллионов строк, похоже, что для запуска такого рода потребуется больше часа. Но, может быть, это нормально. Я не знаю, что я делаю. Может кто-нибудь просветить меня?

Ответ 1

Это нормально в зависимости от характеристик вашего сервера. Способ MySQL создает индексы по таблице, а затем сортирует и добавляет индексы. Это означает, что ему необходимо перезаписать все данные, а затем отсортировать все данные (не дешево любым способом). Это зависит от производительности сервера ввода-вывода и от того, сколько вы можете дать вам.

Вот несколько ресурсов для получения дополнительной информации...