Кто-то просто сказал мне, что InnoDB намного лучше, чем MyISAM. Таким образом, когда я составляю таблицу, я должен всегда пытаться использовать Механизм InnoDB вместо MyISAM? Или оба имеют, это - большие преимущества?
MyISAM
является безтранзакционным и куча организованным. Записи идентифицируются по смещению строки в таблице, а индексы хранят это смещение как указатель на строку.
InnoDB
поддерживает транзакции и является индексно-организованным. Запись идентифицируется значением PRIMARY KEY
(или скрытым внутренним столбцом не определено PRIMARY KEY
) и хранится в B-дереве
. Вспомогательные индексы хранят значение PRIMARY KEY
как указатель строки.
Запросы, которые включают в себя полное сканирование таблицы или поиск по вторичному индексу, обычно выполняются быстрее в таблицах MyISAM
.
Запросы, которые включают в себя поиск PRIMARY KEY
, обычно выполняются быстрее в таблицах InnoDB
. Таблицы
MyISAM
хранят количество записей в таблице в метаданных таблицы, поэтому запросы типа этого:
SELECT COUNT(*)
FROM myisamtable
являются мгновенными.
MyISAM
таблицы полностью заблокированы на операциях DML
(за некоторыми исключениями).
InnoDB
таблицы блокируют отдельные записи и индексные пробелы, однако это записи и пробелы, которые сканируются, а не только те, которые совпадают с условием ГДЕ
. Это может привести к блокировке записей, несмотря на то, что они не совпадают.
InnoDB
таблицы поддерживают референциальную целостность (FOREIGN KEY
s) . Таблицы MyISAM
не поддерживают.
Есть несколько сценариев, которые могут показать преимущества обоих движков.
.Simple answer: Нет, не стоит.
Несколько пунктов о каждом движке:
InnoDB
MyISAM
См. подробнее в Руководстве:
Проще говоря:
Вам следует использовать InnoDB:
Вам следует использовать MyISAM:
IMHO вы всегда должны предпочитать InnoDB
, а не MyISAM[113577] из-за поддержки транзакций, которая лежит в основе каждой системы реляционных баз данных.
InnoDB является полностью ACID-совместимым движком базы данных и поэтому предлагает поддержку транзакций и т.д. Поэтому она может работать медленнее, чем база данных MyISAM, которая, как правило, оптимизируется в другом направлении.
Следовательно, если вам нужны транзакции InnoDB (или другая СУБД, например, PostgreSQL), то это очевидный выбор.
На Википедии
Можно использовать и то, и другое. Вы можете использовать InnoDB для базы данных/транзакций записи, но читать обратно из базы данных MyISAM, которая денормализована. Это дает лучшее из обоих миров. Вы знаете, что ваши данные безопасны при использовании ссылочной целостности из InnoDB, и вы можете читать их так быстро, как захотите с MyISAM.
.