Создать индекс, а затем вставить или вставить, а затем создать индекс? - PullRequest
0 голосов
/ 21 ноября 2018

Я вставляю большой объем данных в таблицу в Mysql, мне нужно создать индекс для быстрого доступа к данным, однако, я хотел бы знать, есть ли разница (в производительности) между этими сценариями:

  • Создать индекс, а затем вставить все данные
  • Вставить все данные, а затем создать индекс

заранее спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Для механизма хранения InnoDB для индекса кластера будет быстрее указывать индекс кластера (т. Е. PRIMARY KEY) в таблице до вставки данных.

Это происходит потому, чтоесли кластерный индекс (PRIMARY KEY) не определен в таблице, то InnoDB будет использовать скрытый 6-байтовый счетчик с автоинкрементным увеличением для индекса кластера.Если PRIMARY KEY указывается позже, необходимо перестроить всю таблицу.


Для вторичных индексов (т. Е. Некластерных индексов) с InnoDB обычно быстрее вставлять данные без определения вторичных индексови затем создайте вторичные индексы после загрузки данных.


FOLLOWUP

Что касается скорости загрузки в таблицу (в частности, в таблицу, которая усекается / очищается)и затем перезагружается), удаление и повторное создание индексов - это хорошо известный метод ускорения обработки не только с MySQL, но и с другими СУБД, такими как Oracle.)

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

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

С точки зрения ускорения загрузки методика «удаления и повторного создания индексов» не даст нам существенных улучшений.мы получаем от других изменений.Например, это будет не то улучшение, которое мы увидим, если использовать LOAD DATA вместо INSERT операторов или многострочных INSERT операторов по сравнению с серией одноэлементных INSERT операторов.

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