Переместить миллион записей из таблицы MEMORY в таблицу MYISAM - PullRequest
5 голосов
/ 13 апреля 2010

Я ищу быстрый способ перемещения записей из таблицы MEMORY в таблицу MYISAM. Таблица MEMORY насчитывает около 0,5 миллиона записей. Обе таблицы имеют одинаковую структуру (одинаковое количество столбцов, типы данных и т. Д.). Но таблица MYISAM индексируется (B-TREE) по нескольким столбцам. Есть около 25 столбцов, большинство из которых являются целыми числами без знака.

Я уже пытался использовать запрос "INSERT INTO SELECT * FROM". Но есть ли более быстрый способ сделать это?

Ценю вашу помощь.

Prashant

Ответы [ 3 ]

1 голос
/ 13 апреля 2010

Другие отметили - вы не должны использовать индексы во время вставки. Вы можете отключить их обновление для каждой вставки:

ALTER TABLE table DISABLE KEYS;
INSERT INTO table
ALTER TABLE tbl_name ENABLE KEYS;

А также заблокировать таблицу для получения записи по одному индексу:

LOCK TABLES table WRITE;
INSERT INTO table
UNLOCK TABLES;

В любом случае, если вы используете его в одном INSERT ... SELECT, вы можете не получить значительного прироста производительности.

Вы также можете настроить bulk_insert_buffer_size в настройках сервера.

Подробнее о: http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

0 голосов
/ 13 апреля 2010

Вероятно, это в основном про тюнинг. Таблица MyISAM изначально пуста? Если это так, вы можете сделать несколько читов - отключить индексы во время загрузки, затем включить их (это НЕ хорошая идея для непустой таблицы).

Выполнение ORDER BY для таблицы памяти не является особенно хорошей идеей, поскольку они обычно используют хеш-индексы, следовательно, не могут выполнять сканирование индексов по порядку, поэтому это приведет к дополнительному файлу sortort (), что, вероятно, плохо.

0 голосов
/ 13 апреля 2010

В принципе, вы должны получить хорошую производительность:

  1. Создать таблицу назначения без вторичных индексов.

  2. Сортировка содержимого исходной таблицы по первичному ключу целевой таблицы.

  3. Вставить отсортированные записи в целевую таблицу.

  4. Добавлять вторичные индексы по одному за раз.

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