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

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

19
задан BenV 29 June 2010 в 04:59
поделиться

6 ответов

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

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

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

Запросы, которые включают в себя поиск PRIMARY KEY, обычно выполняются быстрее в таблицах InnoDB. Таблицы

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

SELECT  COUNT(*)
FROM    myisamtable

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

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

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

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

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

.
35
ответ дан 30 November 2019 в 02:16
поделиться

Simple answer: Нет, не стоит.

Несколько пунктов о каждом движке:

InnoDB

  • Full support for Foreign Key restraints and transactions. (ACID-совместимый)
  • Блокировка на уровне строки.
  • Возможно, более быстрые утверждения INSERT. (И, возможно, UPDATE также)

MyISAM

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

См. подробнее в Руководстве:

11
ответ дан 30 November 2019 в 02:16
поделиться

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

Вам следует использовать InnoDB:

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

Вам следует использовать MyISAM:

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

IMHO вы всегда должны предпочитать InnoDB, а не MyISAM[113577] из-за поддержки транзакций, которая лежит в основе каждой системы реляционных баз данных.

4
ответ дан 30 November 2019 в 02:16
поделиться

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

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

На Википедии

1
ответ дан 30 November 2019 в 02:16
поделиться

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

.
0
ответ дан 30 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: