Как быстрее создать индекс?


У меня есть 10 миллионов строк в моей таблице в MySQL и 7 индексов в этой таблице. Теперь, когда я пытаюсь добавить 8-е, для этого требуется бесконечное время. Есть ли какой-либо способ обойти эту проблему, чтобы легко и быстро добавить 8-й индекс?

Author: Tomasz Smykowski, 2010-05-25

3 answers

Это один из тысячи способов, которыми MySQL просто отстой. По замыслу...

Подробности: http://lists.mysql.com/mysql/202489

И мне все равно, если я потеряю карму за этот ответ.

 2
Author: Marco Mariani, 2010-05-24 21:21:57

Нет, время, необходимое для создания индекса, прямо пропорционально объему имеющихся у вас данных. В MS SQL я создаю индексы в таблице с таким количеством записей примерно за 10 минут.

РЕДАКТИРОВАТЬ: После просмотра комментария, пожалуйста, подробнее остановитесь на infinite. По определению, вы говорите, что это никогда не заканчивается, мой ответ связан с длительным созданием индекса, а не бесконечным.

 5
Author: Dustin Laine, 2010-05-24 21:13:31

Какой движок вы используете? Реализация ALTER ТАБЛИЦЫ... ИНДЕКС СОЗДАНИЯ значительно варьируется.

При использовании MyISAM любое изменение индекса требует полного перестроения таблицы. Это не присуще движку, но ошибка, которая никогда не была исправлена.

Используя InnoDB, создание вторичного индекса не требует перестройки таблицы, но эта оптимизация доступна только в том случае, если вы используете плагин InnoDB (а не более старый, поставляемый движок). Изменение первичного ключа всегда требуется перестроение, потому что он кластеризован.

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

Восстановление таблицы, которая не помещается в оперативную память, довольно дорого, я рекомендую избегать этого, если это возможно.

Восстановление отдельного индекса, который не подходит в оперативной памяти это ОЧЕНЬ дорого, и его лучше избегать.

Как часто вам нужно добавлять новые индексы? Возможно, вы можете заполнить таблицы уже созданным индексом?

 0
Author: MarkR, 2010-05-24 22:21:59