Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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 таблицы нет.

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

Ответ 2

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

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

InnoDB

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

MyISAM

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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