Медленная вставка в таблицу innoDB MySQL при добавлении вторичного ключа - PullRequest
2 голосов
/ 30 октября 2011

У меня проблема с буферизацией таблицы InnoDB, которую я не могу понять:

  • У меня есть таблица с 5 столбцами, из которых 4 столбца составляют первичный ключ, и есть еще 3 вторичных ключа; в этой таблице массовая вставка занимает очень много времени - до 400 секунд на 100 000 записей (то есть всего 250 записей в секунду)
  • Если все вторичные индексы отброшены, вставки выполняются очень быстро - 20 секунд для 100 000 записей (5000 записей в секунду или в 20 раз быстрее)
  • Если я добавлю хотя бы один вторичный ключ в один столбец идентификатора пользователя bigint, который также является частью первичного ключа (мне часто нужно искать данные конкретных пользователей), вставки сразу становятся 3-4 раз медленнее.

Что здесь происходит? Я подозреваю, что ответ заключается в том, как InnoDB хранит индексы, но после большого чтения я не могу понять это. Самое странное, что одна и та же таблица со всеми добавленными индексами с движком MyISAM всегда работает со скоростью 5000 записей в секунду.

1 Ответ

0 голосов
/ 30 октября 2011

Не знаю почему.Но на веб-сайте MySQL есть совет по настройке производительности для вставки в InnoDB вторичных ключей (что для меня означает, что это именно то, что есть, и вам придется с этим бороться): "Если у вас есть УНИКАЛЬНЫЕ ограничения на вторичные ключиможно ускорить импорт таблиц, временно отключив проверки уникальности во время сеанса импорта ... "

...