Сколько времени это должно взять для создания индекса с помощью ALTER TABLE в MySQL?

Это могло бы быть немного похожим на выяснение, какой длины длина строки, но статистика:

  • Intel двухъядерные 4 ГБ RAM
  • Таблица с 8 миллионами строк, ~ 20 столбцов, главным образом varchars с auto_increment основным идентификатором
  • Запрос: ALTER TABLE my_table ИНДЕКС ADD my_index (my_column);
  • my_column является varchar (200)
  • Устройством хранения данных является MyISAM

Порядок величины, это должна быть 1 минута, 10 минут, 100 минут?

Спасибо

Править: Хорошо 2 часам потребовались 37 минут, по сравнению с 0 часами 33 минуты на меньшей машине спецификации, с чрезвычайно идентичными взлетами набора. Я понятия не имею, почему это взяло настолько дольше. Единственная возможность состоит в том, что машина напоминания HD на 85% полна со свободными 100 ГБ. Должен быть достаточно, но я предполагаю, что это зависит от того, как то свободное пространство распределяется.

7
задан Richard H 15 February 2010 в 19:52
поделиться

3 ответа

Если вы просто добавляете единственный индекс, это займет около 10 минут. Однако это займет 100 минут или больше, если у вас нет этого индексного файла в памяти.

200 varchar с 8 миллионами строк займут максимум 1,6 ГБ, но со всеми накладными расходами на индексацию потребуется около 2–3 ГБ. Но это займет меньше времени, если длина большинства строк меньше 200 символов. (Вы можете выбрать sum (length (my_column)) , чтобы узнать, сколько места требуется.)

Вы хотите отредактировать свой /etc/mysql/my.cnf файл. Поиграйте с этими настройками;

myisam_sort_buffer_size = 100M
sort_buffer_size = 100M

Удачи.

6
ответ дан 7 December 2019 в 05:22
поделиться

Кроме того, если вам когда-либо понадобится создать несколько индексов, лучше всего создавать все индексы за один вызов, а не по отдельности ... Причина: в основном это похоже на переписывание всех страниц индекса, чтобы они включали ваш новый индекс с тем, что еще у него было. Я обнаружил это в прошлом, имея таблицу на 2+ гигабайта, и мне нужно было построить на ней около 15 индексов. Построение всех по отдельности продолжало постепенно увеличиваться во времени между каждым индексом. Тогда попытка всего сразу была немногим больше, чем около трех отдельных индексов, поскольку он строил все для каждой записи и записывал все сразу, вместо того, чтобы постоянно перестраивать страницы.

1
ответ дан 7 December 2019 в 05:22
поделиться

В моей тестовой базе данных MusicBrainz таблица дорожка создает ПЕРВИЧНЫЙ КЛЮЧ и три вторичные индексы за 25 минут:

CREATE TABLE `track` (
  `id` int(11) NOT NULL,
  `artist` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `gid` char(36) NOT NULL,
  `length` int(11) DEFAULT '0',
  `year` int(11) DEFAULT '0',
  `modpending` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `gid` (`gid`),
  KEY `artist` (`artist`),
  KEY `name` (`name`)
) DEFAULT CHARSET=utf8

В таблице есть 9001870 записей.

Машина представляет собой Intel (R) Core (TM) 2 CPU 6400 @ 2,13 ГГц с 2 ГБ оперативной памяти , Fedora Core 12 , MySQL 5.1 .42 .

@@ myisam_sort_buffer_size равно 256M .

1
ответ дан 7 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: