Короткий рассказ о том, что произошло. Я работаю с 71 миллионом записей (не так много по сравнению с миллиардами записей, обработанных другими). В другом потоке кто-то предположил, что текущая настройка моего кластера не подходит для моей потребности. Моя структура таблицы:
CREATE TABLE `IPAddresses` (
`id` int(11) unsigned NOT NULL auto_increment,
`ipaddress` bigint(20) unsigned default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
И я добавил 71 миллион записей, а затем сделал:
ALTER TABLE IPAddresses ADD INDEX(ipaddress);
Это было 14 часов, и операция все еще не завершена. После Googling я обнаружил, что для решения этой проблемы существует хорошо известный подход - Разделение. Я понимаю, что мне нужно разбить мою таблицу сейчас на основе ipaddress, но могу ли я сделать это без воссоздания всей таблицы? Я имею в виду, через выражение ALTER? Если да, было одно требование, говорящее, что столбец, который должен быть секционирован, должен быть первичным ключом. Я буду использовать id этого ipaddress при построении другой таблицы, поэтому ipaddress не является моим основным ключом. Как мне разделить мою таблицу с учетом этого сценария?