Когда MyISAM лучше, чем InnoDB? - PullRequest
8 голосов
/ 03 июля 2011

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

Но когда MyISAMдействительно лучше, чем InnoDB?

Ответы [ 6 ]

13 голосов
/ 03 июля 2011

MyISAM лучше, чем InnoDB, когда вам не нужны эти расширенные функции , а скорость хранения важнее, чем другие проблемы. MyISAM также позволяет выполнять полнотекстовый поиск внутри самого движка базы данных. необходимости запрашивать результаты, а затем искать их как массив или что-то еще в вашем приложении.

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

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

Стоит также упомянуть, что InnoDB поддерживает блокировку на уровне строк, в то время как MyISAM поддерживает только блокировку на уровне таблиц - то есть, что во многих типичных ситуациях InnoDB может быть значительно быстрее благодаря большему количеству запросов, выполняемых параллельно.

Суть: Используйте InnoDB, если вам абсолютно не нужно использовать MyISAM. Кроме того, развивайтесь на PostgreSQL и получайте лучшее от обоих.

4 голосов
/ 03 июля 2011

MyISAM не поддерживает транзакции (и другие упомянутые вещи), поэтому он может работать быстрее. MyISAM - это способ повысить производительность в тех ситуациях, когда вам не нужны эти функции.

3 голосов
/ 03 июля 2011

MyISAM поддерживает полный текст, как уже упоминалось, но также поддерживает тип таблицы MERGE.Это удобно, когда у вас большой стол и вы хотите периодически «обменивать» / архивировать его части.Подумайте о регистрации или данных отчета, которые вы хотите сохранить в последнем квартале и / или году.MyISAM лучше обрабатывает такие большие объемы данных, когда вы в основном вставляете и редко обновляете или удаляете.

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

2 голосов
/ 03 июля 2011

Есть несколько функций, которые MySQL реализовал только для MyISAM (например, индексирование полнотекстового кода).

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

1 голос
/ 03 июля 2011

Также: полнотекстовый поиск в mySQL поддерживается только в таблицах myISAM.

0 голосов
/ 09 сентября 2013

MyISAM имеет очень простую структуру по сравнению с InnoDB. Версии строк не существует, в таблице один файл, и строки хранятся последовательно. Однако, хотя он поддерживает одновременные вставки (SELECT и 1 INSERT могут работать вместе), он также имеет блокировки на уровне таблицы (если в одной таблице 2 INSERT, 1 должен ждать). Кроме того, ОБНОВЛЕНИЯ и УДАЛЕНИЯ медленные из-за структуры файлов данных.

MyISAM не поддерживает транзакции или внешние ключи.

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

InnoDB очень хорошо поддерживает параллелизм и транзакции. Имеет приличную поддержку полнотекста и почти приличную поддержку внешних ключей.

...