При выборе механизма хранения в MySQL, когда следует использовать InnoDB, а когда MyISAM и от чего зависит выбор? Одно превосходит другое?
В моем случае у меня есть 8 таблиц, некоторые с полмиллионом записей, другие маленькие, и все они каким-то образом связаны.
Единственной причиной использования MyISAM в версиях MySQL до 5.5 было то, что InnoDB не поддерживала секционирование таблиц или создание полнотекстовых индексов.
Этих ограничений больше нет.
Единственная причина использования MyISAM заключается в том, что он быстрее читается и немного быстрее вставляется (массово и измеряет изолированный процесс), но это потому, что такие операции выполняют блокировку таблицы.
Если вы собираетесь иметь несколько обновлений или одновременных вставок, например, блокировка на уровне таблицы очень неэффективна по сравнению с обновлением таблицы InnoDB, которая использует блокировку на уровне строк и, таким образом, позволяет выполнять параллельные операции.
Добавьте ко всему этому, что InnoDB позволяет использовать внешние ключи, необходимые для поддержания ссылочной целостности модели данных, поддержки транзакций.
Короче говоря, используйте InnoDB, потому что
Все эти преимущества намного перевешивают снижение скорости выбора.
Выбор зависит от различных факторов. В вашем конкретном случае, поскольку вам нужен реляционный дизайн, вы должны использовать InnoDB .
Краткое изложение:
MyISAM
Большая скорость в целом при восстановлении данных.
Отсутствие характеристик атомарности, так как не нужно ни проверять ссылочную целостность, ни блокировать таблицы для выполнения операций, это приводит нас, как и предыдущие пункты, к большей скорости.
ИнноБД
Это позволяет иметь характеристики ACID (атомарность, согласованность, изоляция и долговечность: атомоцид, согласованность, изоляция и долговечность на испанском языке), гарантирующие целостность наших таблиц.
Целостность данных, когда содержимое изменяется с помощью операторов INSERT, DELETE или UPDATE, целостность сохраненных данных может быть потеряна различными способами.
InnoDB восстанавливается после непредвиденных системных ошибок или перезапускается из своих журналов, в то время как MyISAM требует сканирования, исправления и перестроения индекса данных таблицы, которые еще не были сброшены на диск.
Кроме того, вполне вероятно, что если наше приложение активно использует INSERT и UPDATE, мы заметим увеличение производительности по сравнению с MyISAM.
Некоторые интересные ссылки:
с MyISAM сегодня единственное отличие, которое я видел в отношении innodb, заключается в том, что вы можете делать запросы в (очень длинных) текстовых полях, ссылаясь на содержащиеся в нем слова, например, вы можете сохранить полный абзац и сказать, что вы приносите запись который содержит слова «голова» внутри абзаца и он их выведет, то есть способ, которым он управляет полями текстового типа, иначе я всегда использую innodb, раньше были определенные ограничения, как вам ответили выше. Я бы использовал MyISAM в таблице, которая хранит, например, пролог книги в одном из своих полей или что-то в этом роде, и это нужно сделать параметром поиска.