Медленная скорость вставки на столе MYISAM - PullRequest
0 голосов
/ 26 сентября 2011

Мне нужно создать таблицу, содержащую два атрибута: id и author . Эти два атрибута образуют составной ключ. Кроме того, мне нужно выполнить поиск по индексу в поле author . Поэтому я создаю таблицу, используя следующую инструкцию:

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ авторы (автор VARCHAR (100) NOT NULL, id VARCHAR (200) NOT NULL, ИНДЕКС, ИСПОЛЬЗУЯ BTREE (author, id), PRIMARY KEY (author, id)) ENGINE = MYISAM;

Теперь, когда я пытаюсь вставить около 4,5 миллионов записей с использованием JDBC, скорость вставки в конце становится ужасно низкой. Атрибут id относится к публикации, которая была создана соответствующим автором. Один автор связан с несколькими идентификаторами и наоборот. Среднее количество идентичных значений идентификаторов меньше количества идентичных значений автора. Поэтому я протестировал ту же процедуру с замененными атрибутами. В этом случае скорость вставки остается практически постоянной. Есть ли способ оптимизировать таблицу, чтобы повысить производительность? Я не совсем знаю, как MYISAM управляет индексацией составных ключей. Может быть, процесс балансировки является причиной ...

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

1 Ответ

0 голосов
/ 26 сентября 2011

Я заметил несколько проблем:

  • вы определяете два индекса для одной и той же пары столбцов (author, id): нормальный индекс и первичный ключ, который также является особым типомуникальный индекс.
  • индексы имеют очень длинные значения VARCHAR.
  • ваша база данных не в первой нормальной форме, потому что, как вы сказали, автор может повторяться, вы используете полный авторимя для создания отношения, в то время как вы должны использовать идентификатор и поместить авторов в отдельную таблицу.

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

...