Добавление индекса на большую таблицу занимает вечно - PullRequest
14 голосов
/ 04 января 2011

У меня есть таблица (в 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 Ответ

15 голосов
/ 04 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...