MySQL. Что происходит с индексами при вставке данных в таблицу с индексами?

Здравствуйте.
Вопрос достаточно простой.
Есть таблица с 3 полями. Одно из них id. 2-е поле проиндексировано. Третье - без индексов. В таблице 10 млн записей.
1. Если в таблицу будут вставляться данные, то индексы для таблицы будут перестраиваться, а если записей много, то это будет происходить долго? В это время возможно ли будет беспроблемно читать данные и записывать их в таблицу?
2. Какова ситуация в случае изменения строки в индексированной строке и не индексированной?
  • Вопрос задан
  • 4424 просмотра
Решения вопроса 1
mgyk
@mgyk
1) Да. Не сильно зависит от размера таблицы. Время на обновление индекса примерно одинаковое на каждую запись. Данные можно читать и писать, залочена будет только текущая запись (INNODB) или будет залочена вся таблица (MYISAM) до того момента как все запишется.
2) Для индексированной строки - на запись меняется индекс.

Вставка в таблицу с индексами медленнее, чем без. Если нужно вставлять большими кусками по милиону записей и больше, можно выключить индексы, вставить данные, а потом включить.

ALTER TABLE DISABLE KEYS
INSERT INTO xxx VALUES (1,2,3)
ALTER TABLE ENABLE KEYS

В 99% это не нужно, достаточно вставлять данные большими кусками c помощью
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); что уже даст очень приличный прирост скорости
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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