Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.
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
,ibd
,иMyISAM
да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
Конструкция подключаемого механизма хранения, используя нашу, вы можете выбрать механизм хранения, который подходит вам в соответствии с потребностями вашего бизнеса.
Если вы считаете, что статья хороша, отсканируйте код, чтобы следовать ему. Ваше внимание — самая большая мотивация для моего письма.