Низкая скорость вставки в таблицу MYISAM

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

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ.

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

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


person K435    schedule 26.09.2011    source источник
comment
почему первичный ключ состоит из (автор, идентификатор)?   -  person Mitch Wheat    schedule 26.09.2011
comment
Ни автор, ни идентификатор не уникальны.   -  person K435    schedule 26.09.2011
comment
Сорри, я имел ввиду составной ключ. Только что поправил...   -  person K435    schedule 26.09.2011


Ответы (1)


Я замечаю несколько проблем:

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

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

person stivlo    schedule 26.09.2011
comment
Спасибо за ваш ответ! Конечно, первичный ключ уже определяет индекс btree... - person K435; 26.09.2011