Кто-то просто сказал мне, что InnoDB намного лучше, чем MyISAM. Поэтому, когда я создаю таблицу, должен ли я всегда пытаться использовать InnoDB Engine вместо MyISAM? Или у обоих есть большие преимущества?
Должен ли я всегда предпочитать MySQL InnoDB поверх MyISAM?
Ответ 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.