Серия «Повторное изучение MySQL» (5): рассказ о понимании механизма хранения MySQL.

задняя часть MySQL

Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.

MySQLЧто касается архитектуры механизма хранения, по сравнению с другими системами управления реляционными базами данных, такими какOracle,SQL Serverи т.д. база данных, этоMySQLСамая большая особенность такжеMySQLСамое разное место, поэтому в этой статье мы вкратце разберемся.

Архитектура механизма хранения

MySQLВ случае архитектуры двигателя хранения разработана как модель архитектуры для смешной архитектуры, которая без ущерба для любой бизнес-логики, мы всегда можем заменить текущий механизм хранения для достижения требований к хранению и производительности.

Фактически, мы можем понять этот процесс с помощью следующей диаграммы архитектуры службы MySQL:

Из приведенного выше рисунка мы видим, что,MySQLизServerуровень и уровень механизма хранения черезMySQLСервер предоставляет единыйAPIИнтерфейс взаимодействует с механизмом хранения,ServerОн не заботится о деталях реализации базового механизма хранения, а разные механизмы хранения имеют свои собственные реализации для хранения, обработки и запросов данных.

Просмотр механизмов хранения

MySQLПоддерживает несколько механизмов хранения, если мы хотим видеть свой собственныйMySQLСколько механизмов хранения поддерживается сервером и может быть использованоSHOW ENGINESкоманда для запроса, например:

mysql> SHOW ENGINES;

Результаты запроса следующие:

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

Выше находится механизм хранения, поддерживаемый моим сервером, конечно разнымMySQLМеханизмы хранения, поддерживаемые версией, различаются.В приведенной выше таблице значение каждого поля:

Engine: имя механизма хранения.

Support: поддерживается ли движок и является ли движок механизмом хранения по умолчанию,YESОн выразил поддержку,NOуказывает, что он не поддерживается,DEFAULTУказывает в качестве механизма хранения по умолчанию.

Comment: Краткое введение в механизмы хранения.

Transactions: Указывает, поддерживает ли механизм транзакции.

XA: указывает, поддерживает ли механизм хранения распределенные транзакции.

Savepoints: указывает, поддерживает ли механизм хранения частичный откат транзакций.

Введение в механизм хранения

Среди механизмов хранения, перечисленных выше, мы чаще всего используемInnoDBиMyISAMЭтот механизм хранения отсутствует, поэтому давайте сосредоточимся на представлении двух механизмов хранения и их сравнении.

InnoDB

InnoDBмеханизм храненияMySQLМеханизм хранения по умолчанию поддерживает блокировку на уровне строк, управление несколькими версиями MVCC, чтение без блокировки, транзакции, внешнее состояние и другие функции.MySQLЧтобы стать более полной системой управления базами данных, блокировка на уровне строк позволяет InnoDB поддерживать большее количество параллелизма.

Вообще говоря, если нет других специальных требований, механизм хранения InnoDB является первым выбором для создания таблиц данных с использованием MySQL.

MyISAM

существуетMySQL5.1до,MyISAMмеханизм храненияMySQLЯвляется механизмом хранения по умолчанию, MyISAM поддерживает блокировку на уровне таблицы, не поддерживает транзакции, больше подходит для большого количества операций выбора и вставки.

Сравнение механизмов хранения InnoDB и MyISAM

Давайте сравним различия между двумя механизмами хранения в следующих аспектах.

бизнес поддержка

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

Обработка индексов и первичных ключей

InnoDBМеханизм хранения используется индексами агрегации.InnoDBЛистовые узлы первичного ключа — это данные строки, а другие индексы указывают на первичный ключ, в то время какMyISAMМеханизм хранения использует некластеризованный индекс, а первичный ключ и конечные узлы других индексов хранят указатели на данные.

ДругойMyISAMТаблицы данных разрешены без первичных ключей и других индексов, в то время какInnoDBЕсли таблица данных не имеет первичного ключа, будет сгенерирован невидимый для пользователя 6-байтовый первичный ключ.

иностранный ключ

MyISAMНе поддерживает внешние ключи иInnodbОн поддерживает установление связей внешнего ключа между таблицами данных.

Различия в файлах хранения

InnodbФайлы хранения имеютfrm,ibdMyISAMдаfrm,MYD,MYI,Innodbв файле храненияfrmфайл определения структуры таблицы данных,ibdфайл данных в MyISAMfrmфайл определения структуры таблицы данных,MYDфайл данных,MYIэто файл, в котором хранится индекс.

select count(*)

использоватьMyISAMТаблица данных механизма хранения будет записывать общее количество строк в таблице данных, поэтому используйтеMyISAMТаблица данных механизма храненияselect count(*), можно быстро получить общее количество строк в таблице данных, а дляInnoDBДля таблицы данных механизма хранения, если вы хотите запросить общее количество строк, вам необходимо выполнить полное сканирование таблицы, чтобы получить его.

уровень блокировки

InnoDBподдерживает блокировку на уровне строки, аMyISAMПоддерживает только блокировку уровня таблицы, такInnoDBУлучшенная поддержка высокого параллелизма.

Установить механизм хранения по умолчанию

Мы сказали выше,InnoDBдаMySQLМеханизм хранения по умолчанию, конечно, мы также можем установить другие механизмы хранения в качестве механизма хранения по умолчанию, есть два способа установить, например:

Устанавливается при запуске сервера

Когда сервер запустится, используйте--default-storage-engineКоманда может установить механизм хранения по умолчанию:

mysqld --default-storage-engine=MyISAM

Механизм хранения, указанный выше, является механизмом хранения обычной таблицы данных, также можно использовать хранилище по умолчанию для временной таблицы.--default-tmp-storage-engineпараметры для установки:

mysqld --default-tmp-storage-engine=MyISAM

Устанавливается командой set

Помимо настройки при запуске сервера MySQL, после входа на сервер можно также использоватьSETКоманда для установки механизма хранения по умолчанию:

Укажите механизм хранения по умолчанию для обычных таблиц данных:

SET default_storage_engine=MyISAM;

Укажите механизм хранения временных таблиц данных по умолчанию:

SET default_tmp_storage_engine=MyISAM

Установите механизм хранения для таблицы данных

Существует два случая указания механизма хранения для таблицы данных, один из них заключается в использованииCREATE TABLEКогда инструкция создает таблицу данных, другая предназначена для уже созданной таблицы данных.

При создании таблицы

Когда мы создаем таблицу данных, если механизм хранения не указан, будет использоваться механизм хранения по умолчанию, установленный выше, например следующий оператор создания таблицы:

CREATE TABLE users(
    id INT NOT NULL,
    name VARCHAR(20) NOT NULL,
    gender TINYINT NOT NULL,
    email VARCARH(50) NOT NULL,
    PRIMARY KEY(id)
);

Если мы создаем таблицу данных, вы не хотите использовать механизм хранения по умолчанию, вы можетеCREATE TABLEуказывается после утвержденияENGINEПараметры для установки механизма хранения, такие как:

CREATE TABLE users(
    id INT NOT NULL,
    name VARCHAR(20) NOT NULL,
    gender TINYINT NOT NULL,
    email VARCARH(50) NOT NULL,
    PRIMARY KEY(id)
)ENGINE=MyISAM;

Изменить механизм хранения таблиц данных

Для таблиц данных, которые были созданы, вы можете использоватьALTER TABLE语句Например, чтобы изменить механизм хранения, мыusersДаташит изменился наInnodbмеханизм хранения, вы можете сделать это:

mysql> ALTER TABLE users engine=InnoDB;

резюме

существуетMySQLВ хранилище данных запросы, обработка и модификация выполняются механизмом хранения.MySQLКонструкция подключаемого механизма хранения, используя нашу, вы можете выбрать механизм хранения, который подходит вам в соответствии с потребностями вашего бизнеса.


Если вы считаете, что статья хороша, отсканируйте код, чтобы следовать ему. Ваше внимание — самая большая мотивация для моего письма.