Должен ли я всегда предпочитать MySQL InnoDB поверх MyISAM?

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

6 ответов

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

InnoDB поддерживает транзакции и индексируется. Записи идентифицируются значением PRIMARY KEY (или скрытым внутренним столбцом, если нет PRIMARY KEY) и сохраняются в B-Tree. Вторичные индексы сохраняют значение PRIMARY KEY как указатель строки.

Запросы, которые включают полное сканирование таблицы или поиск вторичных индексов, обычно быстрее в таблицах MyISAM.

Запросы, содержащие запросы PRIMARY KEY, обычно быстрее работают с таблицами InnoDB.

MyISAM таблицы хранят количество записей в таблице в метаданных таблицы, поэтому запросы, подобные этому:

SELECT COUNT(*)
FROM myisamtable

являются мгновенными.

MyISAM таблицы полностью заблокированы в операциях DML (за несколькими исключениями).

InnoDB таблицы блокируют отдельные записи и промежутки индекса, однако это записи и отсканированные пробелы, а не только те, которые соответствуют условию WHERE. Это может привести к блокировке записей, несмотря на то, что они не совпадают.

InnoDB таблицы поддерживают ссылочную целостность (FOREIGN KEY s). MyISAM таблицы нет.

Существует несколько сценариев, которые могут показывать преимущества обоих движков.


Простой ответ: Нет, не стоит.

Несколько точек на каждый движок:

InnoDB

  • Полная поддержка ограничений и транзакций для иностранных ключей. (Соответствует требованиям ACID)
  • Блокировка уровня строки.
  • Возможно, более быстрые операторы INSERT. (И, возможно, UPDATE)

MyISAM

  • Более быстрые операторы SELECT.
  • Поддержка полнотекстового поиска
  • Столы BLOB и TEXT могут быть проиндексированы
  • Максимальный размер хранилища 4x по сравнению с InnoDB (256TB против 64TB)

Подробнее в руководстве:


Проще говоря:

Вы должны использовать InnoDB:

  • если вам нужна поддержка транзакций
  • если вам нужны внешние ключи

Вы должны использовать MyISAM:

  • если вам не требуется вышеуказанное И
  • вам нужна скорость (более быстрые операции с базой данных)


ИМХО, вы всегда должны предпочитать InnoDB над MyISAM из-за поддержки транзакций, которая лежит в основе каждой системы реляционных баз данных.


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

Поэтому, если вам нужны транзакции, InnoDB (или другая СУБД, такая как PostgreSQL) является очевидным выбором.

Там разумное сравнение на Wikipedia


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

licensed under cc by-sa 3.0 with attribution.