Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Механизмы и отличия между MyISAM и InnoDB движков, реализация myisam и innodb index в MySQL кратко

Лекция



Привет, Вы узнаете о том , что такое mysql, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое mysql, myisam, innodb, индекс innodb, индекс myisam , настоятельно рекомендую прочитать все из категории MySql (Maria DB).

Назначение и сравнение движков MyISAM и InnoDB

MyISAM — одна из основных (наряду с InnoDB) систем хранения данных в СУБД MySQL. Она основывается на принципах ISAM и обладает в сравнении с ним рядом полезных дополнений. Поддерживается с версий MySQL 3.x, до версий MySQL 5.5 являлась системой хранения по умолчанию. MyISAM имеет возможности по сжатию данных, по созданию полнотекстовых индексов. Однако не является устойчивой к сбоям и не выполняет требования ACID.

MariaDB имеет механизм хранения под названием Aria , который описывается как «безопасная альтернатива MyISAM».Однако разработчики MariaDB все еще работают над кодом MyISAM. Основное улучшение - это «Сегментированный ключевой кэш». Если он включен, кеш индексов MyISAM делится на сегменты. Это улучшает параллелизм, поскольку потокам редко требуется блокировать весь кеш.

В MariaDB MyISAM также поддерживает виртуальные столбцы .

InnoDB - это механизм хранения для системы управления базами данных MySQL и MariaDB . С момента выпуска MySQL 5.5.5 в 2010 году он заменил MyISAM как тип таблицы MySQL по умолчанию. Он предоставляет стандартные функции транзакций, совместимые с ACID , наряду с поддержкой внешнего ключа ( декларативная ссылочная целостность ). Он входит в стандартную комплектацию большинства двоичных файлов, распространяемых MySQL AB , за исключением некоторых версий OEM .

Описание MyISAM InnoDB
Транзакционный движек?Транзакция (Transaction) — блок операторов SQL , который в случае ошибки в одном запросе, возвращается к предыдущему состоянию (Rollback), и только в случае выполнения всех запросов подтверждается (Commit) Нет Да
Поддержка внешних ключейВнешние ключи — это способ связать записи в двух таблицах по определенным полям так, что при обновлении поля в родительской автоматически происходит определенное изменение поля в дочерней (дочернюю и родительскую выбираешь при создании ключа; точнее, создаешь ключ в дочерней, который ссылается на родительскую). Нет Да
Блокировка.Блокировка на уровне строк, т.е. если процессу нужно обновить строку в таблице, то он блокирует только эту строку, позволяя другим обновлять другие строки параллельно Блокировка на уровне таблиц Блокировка на уровне строк
Одновременные запросы к разным частям таблицы. Медленнее Быстрее
При смешанной нагрузке в таблице (select/update/delete/insert) Медленнее Быстрее
Операция Insert Быстрее Медленнее, ибо есть оверхед на транзакцию, но это цена надежности
Если преобладают операции чтения (SELECT) Работает быстрее Работает медленнее
DeadlockDeadlock — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами. Не возникают Возможны.
Поддержка полнотекстового поиска Да Нет (доступен начиная с версии MySQL 5.6.4)
Запрос Count(*) Быстрее Медленнее
Поддержка mysqlhotcopyУтилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. Да Нет
Файловое хранение таблиц Каждой таблице отдельный файл Данные при настройках по умолчанию хранятся в больших совместно используемых файлах
Бинарное копировании таблиц?Табличные файлы можно перемещать между компьютерами разных архитектур и разными операционными системами без всякого преобразования. Да Нет
Размер таблиц в БД Меньше Больше
Поведение в случае сбоя Крашится вся таблица По логам можно все восстановить
В случае хранения «логов» и подобного Лучше Хуже

Механизм MyISAM использует B + Tree в качестве структуры индекса, а поле данных конечного узла хранит адрес записи данных. На следующем рисунке представлена ​​схематическая диаграмма индекса MyISAM:

Механизмы и  отличия между MyISAM и InnoDB движков, реализация myisam и innodb index в MySQL

Здесь у нас есть три столбца в таблице. Предположим, мы используем Col1 в качестве первичного ключа. На рисунке выше показан первичный ключ таблицы MyISAM. Видно, что индексный файл MyISAM сохраняет только адрес записи данных. В MyISAM нет разницы в структуре между первичным индексом и вторичным ключом, за исключением того, что первичный индекс требует, чтобы ключ был уникальным, а ключ вторичного индекса может повторяться. Если мы построим вторичный индекс на Col2, структура этого индекса будет показана ниже:

Механизмы и  отличия между MyISAM и InnoDB движков, реализация myisam и innodb index в MySQL

Также как B + Tree, поле данных содержит адрес записи данных. Об этом говорит сайт https://intellect.icu . Следовательно, алгоритм поиска индекса в MyISAM состоит в том, чтобы сначала выполнить поиск индекса в соответствии с алгоритмом поиска B + Tree. Если указанный ключ существует, значение поля данных извлекается, а затем соответствующая запись данных считывается по значению поля данных.
Метод индексации MyISAM также называется «неагрегированием», который вызывается, чтобы отличить его от кластеризованного индекса InnoDB.


Реализация индекса InnoDB

Хотя InnoDB также использует B + Tree в качестве структуры индекса, реализация сильно отличается от MyISAM.
Первое существенное отличие состоит в том, что файлы данных InnoDB сами являются индексными файлами. Из вышеизложенного известно, что индексный файл MyISAM и файл данных являются отдельными, а индексный файл хранит только адрес записи данных. В InnoDB сам файл данных таблицы представляет собой структуру индекса, организованную B + Tree. Поле данных конечного узла этого дерева хранит полную запись данных. Ключ этого индекса является первичным ключом таблицы данных, поэтому сам файл данных таблицы InnoDB является первичным индексом.
Механизмы и  отличия между MyISAM и InnoDB движков, реализация myisam и innodb index в MySQL
На приведенном выше рисунке представлена ​​схематическая диаграмма основного индекса InnoDB (также файла данных). Вы можете видеть, что листовой узел содержит полную запись данных. Этот тип индекса называется кластеризованным индексом. Поскольку сами файлы данных InnoDB агрегируются по первичному ключу, InnoDB требует, чтобы таблица имела первичный ключ (MyISAM не может), если не указан явно, то система MySQL . Столбец, который однозначно идентифицирует запись данных, автоматически выбирается в качестве первичного ключа. . Если такой столбец не существует, MySQL автоматически генерирует неявное поле для таблицы InnoDB в качестве первичного ключа. Длина этого поля составляет 6 байтов, а тип - long.

Второе отличие от индекса MyISAM состоит в том, что поле данных вторичного индекса InnoDB хранит значение соответствующего первичного ключа записи вместо адреса. Другими словами, все вторичные индексы InnoDB ссылаются на первичный ключ как на поле данных. Например, следующее изображение является вторичным индексом, определенным в Col3:
Механизмы и  отличия между MyISAM и InnoDB движков, реализация myisam и innodb index в MySQL
Здесь в качестве критерия сравнения используется код ASCII английского символа. Реализация кластеризованного индекса делает поиск по первичному ключу очень эффективным, но поиск по вторичному индексу должен извлекать индекс дважды: сначала извлекается вторичный индекс для получения первичного ключа, а затем первичный ключ используется для извлечения запись из первичного индекса.
Понимание реализации индексов в различных механизмах хранения очень полезно для правильного использования и оптимизации индексов. Например, зная реализацию индекса InnoDB, легко понять, почему не рекомендуется использовать слишком длинные поля в качестве первичных ключей, потому что все вторичные индексы относятся к первичному. Слишком длинный индекс для первичного индекса сделает вторичный индекс слишком большим. В качестве другого примера использование немонотонного поля в качестве первичного ключа не является хорошей идеей в InnoDB, потому что сам файл данных InnoDB является B + Tree, а немонотонный первичный ключ заставляет файл данных поддерживать B + Tree характеристики при вставке новых записей. Частые корректировки разделения очень неэффективны, и использование самоинкрементирующегося поля в качестве первичного ключа - хороший выбор.

Сравнение других движков баз данных MySQL

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

Name Vendor License Transactional Under active development MySQL versions MariaDB versions
Archive Oracle GPL No Yes 5.0 - present 5.1 - present
Aria MariaDB GPL No Yes None 5.1 - present
Berkeley DB Oracle AGPLv3 Yes No ? - 5.0 None
BLACKHOLE Oracle GPL No Yes 5.0 - present 5.1 - present
CONNECT MariaDB GPL No Yes None 10.0 - present
CSV Oracle GPL No Yes 5.0 - present 5.1 - present
Falcon Oracle GPL Yes No ? None
Federated Oracle GPL ? No 5.0 - present ?
FederatedX MariaDB GPL Yes No None ? - present
InfiniDB Calpont GPL Yes No None None
InnoDB Oracle GPL Yes Yes 3.23 - present 5.1 - present
MEMORY Oracle GPL No Yes 3.23 - present 5.1 - present
Mroonga Groonga Project GPL No Yes None 10.0 - present
MyISAM Oracle GPL No No 3.23 - present 5.1 - present
MyRocks Facebook GPLv2 Yes Yes None 10.2 - present
NDB Oracle GPLv2 Yes Yes ? None
OQGRAPH Oracle GPLv2 No No None 5.2 - present
S3 MariaDB GPL No Yes None 10.5 - present
SEQUENCE MariaDB GPL No Yes None 10.0 - present
Sphinx Sphinx Technologies Inc. GPL No No None 5.2 - present
SPIDER Kentoku Shiba GPL Yes Yes None 10.0 - present
TempTable Oracle GPL No Yes 8.0 - present None
TokuDB Percona Modified GPL Yes No None 5.5 - present
XtraDB Percona GPL Yes Yes None 5.1 - 10.1

Выводы по различиям InnoDB и MyISAM:

  • 1. InnoDB не поддерживает индексы типа FULLTEXT.
  • 2.InnoDB не сохраняет определенное количество строк в таблице, то есть при выполнении select count (*) from table InnoDB будет сканировать всю таблицу, чтобы вычислить, сколько строк, а MyISAM просто считывает количество сохраненных строк. Просто хорошо. Обратите внимание, что когда оператор count (*) содержит условие where, операции в двух таблицах идентичны.
  • 3. Для полей типа AUTO_INCREMENT InnoDB должен содержать только индекс поля, но в таблице MyISAM вы можете создать объединенный индекс с другими полями.
  • 4.DELETE FROM table, InnoDB не будет воссоздавать таблицу, а удалит ее построчно.
  • 5. операция LOAD TABLE FROM MASTER не работает для InnoDB, решение состоит в том, чтобы сначала изменить таблицу InnoDB на таблицу MyISAM, импортировать данные, а затем перейти к таблице InnoDB, но для использования дополнительных функций InnoDB (таких как внешние ключи) Таблица не применяется.
  • Кроме того, блокировка строки таблицы InnoDB не является абсолютной. Если MySQL не может определить диапазон для сканирования при выполнении оператора SQL, таблица InnoDB также заблокирует всю таблицу, например, update table set show=1 where host like "%intellect.icu%"
  • Использовать MyISAM лучше в таблицах, которых преобладает один вид доступа: чтение (новостной сайт) или запись (например, логирование) ;
  • Использование InnoDB имеет смысл во всех остальных случаях и случаях повышенных требований по сохранности данных.

Вау!! 😲 Ты еще не читал? Это зря!

Выводы из данной статьи про mysql указывают на необходимость использования современных методов для оптимизации любых систем. Надеюсь, что теперь ты понял что такое mysql, myisam, innodb, индекс innodb, индекс myisam и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории MySql (Maria DB)

создано: 2016-04-27
обновлено: 2023-08-10
132410



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

MySql (Maria DB)

Термины: MySql (Maria DB)