Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Это сравнение известных движков баз данных для системы управления базами данных MySQL (СУБД). Механизм базы данных (или «механизм хранения») - это базовый программный компонент, который СУБД использует для создания, чтения, обновления и удаления (CRUD) данных из базы данных .

Сравнение InnoDB и MyISAM [ править ]

  1. InnoDB восстанавливается после сбоя или другого неожиданного завершения работы путем воспроизведения своих журналов. MyISAM должен полностью сканировать и восстанавливать или перестраивать любые индексы или, возможно, таблицы, которые были обновлены, но не полностью сброшены на диск. Поскольку подход InnoDB - это приблизительно фиксированное время, в то время как время MyISAM растет с размером файлов данных, InnoDB предлагает большую доступность по мере увеличения размеров базы данных.
  2. InnoDB с innodb_flush_log_at_trx_commit, установленным в 1, очищает журнал транзакций после каждой транзакции, значительно повышая надежность. [1] MyISAM должен запускаться поверх полностью журналируемой файловой системы , такой как ext4, смонтированная с data = journal, чтобы обеспечить такую ​​же устойчивость к повреждению файлов данных. (Журнал может быть помещен на устройство SSD для повышения производительности MyISAM, аналогично журнал InnoDB может быть размещен в файловой системе без ведения журнала, такой как ext2, работающей на SSD, для аналогичного повышения производительности. Надежность не жертвуется ни в том, ни в другом случае. )
  3. InnoDB может работать в режиме, в котором он имеет более низкую надежность, но в некоторых случаях более высокую производительность. Установка innodb_flush_log_at_trx_commit на 0 переключает в режим, в котором транзакции не фиксируются на диске до того, как управление будет возвращено вызывающей стороне. Вместо этого очистка диска происходит по таймеру. [1]
  4. InnoDB автоматически группирует несколько одновременных вставок и одновременно сбрасывает их на диск. [2] MyISAM полагается на блочный кеш файловой системы для кэширования операций чтения строк данных и индексов, в то время как InnoDB делает это в самом движке, комбинируя кеши строк с кешами индексов. [3]
  5. InnoDB будет хранить строки в порядке первичных ключей , если они есть, иначе - в порядке первого уникального ключа . Это может быть значительно быстрее, если выбран ключ, подходящий для обычных операций. [ необходима цитата ] Если нет первичного ключа или уникального ключа, InnoDB будет использовать внутренне сгенерированный уникальный целочисленный ключ и будет физически хранить записи примерно в порядке вставки, как это делает MyISAM. В качестве альтернативы для достижения того же эффекта можно использовать поле первичного ключа с автоинкрементом.
  6. InnoDB предоставляет обновляемое хранилище сжатых страниц LZW как для данных, так и для индексов. Сжатые таблицы MyISAM не могут быть обновлены. [4]
  7. При работе в режимах, полностью совместимых с ACID , InnoDB должен выполнять сброс на диск по крайней мере один раз за транзакцию, хотя он будет объединять сбросы для вставок из нескольких соединений. Для обычных жестких дисков или массивов это накладывает ограничение примерно на 200 транзакций обновления в секунду. Для приложений, требующих более высокой скорости транзакций, потребуются дисковые контроллеры с кэшированием записи и резервным аккумулятором для поддержания целостности транзакций. InnoDB также предлагает несколько режимов, которые уменьшают этот эффект, что, естественно, приводит к потере гарантий целостности транзакций, хотя при этом сохраняет большую надежность, чем MyISAM. MyISAM не имеет этих накладных расходов, но только потому, что он не поддерживает транзакции.
  8. MyISAM использует блокировку на уровне таблицы при обновлении и удалении любой существующей строки с возможностью добавления новых строк вместо блокировки и вставки их в свободное пространство. InnoDB использует блокировку на уровне строк. Для больших приложений баз данных, в которых часто обновляется много строк, блокировка на уровне строк имеет решающее значение, поскольку одиночная блокировка на уровне таблицы значительно снижает параллелизм в базе данных.
  9. И InnoDB, и MyISAM поддерживают полнотекстовый поиск , при этом InnoDB получает поддержку полнотекстового индекса в MySQL 5.6.4, [5], но результаты могут заметно отличаться. [6]

Ссылки [ править ]

  1. ^ a b Справочное руководство по MySQL 5.5 - Параметры запуска InnoDB и системные переменные
  2. ^ "Справочное руководство MySQL 5.5 - Групповая фиксация InnoDB" . Архивировано из оригинала на 2011-11-04 . Проверено 8 октября 2011 .
  3. ^ "Справочное руководство MySQL 5.5 - Механизм хранения InnoDB" . Проверено 28 мая 2015 . CS1 maint: обескураженный параметр ( ссылка )
  4. ^ Справочное руководство MySQL 5.5 - myisampack - Создание сжатых таблиц MyISAM, доступных только для чтения
  5. ^ «Изменения в MySQL 5.6.4 (2011-12-20, этап 7)» . Oracle. 12 декабря 2011 г.
  6. ^ "Полнотекстовый поиск InnoDB в MySQL 5.6: Часть 2, Запросы!" . Блог производительности MySQL. 4 марта 2013 г.

Внешние ссылки [ править ]

  • Документация MySQL по MyISAM Storage Engine
  • Объяснение ограничения количества открытых файлов MyISAM и проблемы с кешем таблиц
  • Статья о проблемах, которые могут возникнуть при использовании MyISAM.