В основу mysql

MySQL

предисловие

Неудивительно, что мы, как бэкенд-обезьяны, каждый день имеем дело с mysql. Помимо утверждения CURD, которое не скучно писать каждый день, какие базовые знания мы должны знать о mysql?

Сразу к делу

Просто нарисовать схему логической архитектуры mysql?

       接 入 层
-----------------------
     ⬆          ⬆      
     ⬇          ⬇    
    缓 存      解 析 器
                 ⬆      
                 ⬇
              优 化 器 
-----------------------

        引 擎

Каковы общие механизмы mysql и в чем различия?

  • InnoDB
    • Поддержка транзакций
    • блокировка строки
    • кластеризованный индекс
    • Вторичный индекс (вторичный индекс) индекс хранит первичный ключ
  • MyISAM
    • Транзакции не поддерживаются
    • блокировка стола
    • Сбой не может быть безопасно восстановлен
    • некластеризованный индекс
    • Вспомогательный индекс (вторичный индекс) индекс хранит адрес фактических данных
  • Memory
    • на основе памяти
    • блокировка стола
    • Длина поля фиксированная, блоб, текст не поддерживается, даже если указано фактическое хранилище vachar, оно будет преобразовано в char
  • Archive
    • Поддерживает только операции вставки/выбора
    • Хорошо для журналов и т. Д.
  • ...

Какова концепция транзакций ACDI?

  • A: атомарность, атомарность, все операции транзакции рассматриваются как единое целое, либо все они выполняются успешно, либо все они терпят неудачу.
  • C: Непротиворечивость, непротиворечивость,  Все изменения состояния данных в транзакции, все изменения только после успешной фиксации транзакции.
  • D: Надежность, постоянство.   После успешного завершения транзакции результирующие изменения данных будут постоянно сохранены в базе данных.
  • I: Изоляция, изоляция,   транзакция не видна другим транзакциям, пока она не будет зафиксирована.

Что такое грязное чтение, фантомное чтение и неповторяемое чтение?

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

Каковы уровни изоляции транзакций MySQL? Каков уровень изоляции по умолчанию?

  • Незафиксированное чтение: одна транзакция еще не зафиксирована, другая транзакция может читать, следствием этого является грязное чтение.
  • Фиксированное чтение (также известное как неповторяемое чтение): незафиксированная транзакция невидима для других транзакций, но будет генерировать фантомные и неповторяемые чтения.
  • Повторяющееся чтение (уровень изоляции mysql по умолчанию): убедитесь, что результаты нескольких чтений в рамках одной и той же транзакции согласованы, но будут происходить фантомные чтения.
  • Сериализуемый: строгая последовательная блокировка, плохой параллелизм.
уровень изоляции грязное чтение неповторяемое чтение галлюцинации
Read Uncommitted
Read Committed ×
Repeatable Read × ×
Serializable × × ×

Что такое МВЦК? Кратко опишите роль и принцип работы MVCC?

MVCC: Multi Version Concurrency Control,  Multi-version Concurrency Control, техническое средство для mysql для предотвращения фантомного чтения. Для каждой строки данных существует строка пробела, а в строке пробела хранятся данные строки данных.время создания,удалить время, время здесь на самом делеНомер версии транзакции. когда,

  • При выборе данных: запрашивать только строки, время создания которых меньше или равно текущему номеру версии транзакции -> текущая транзакция или строки, вставленные до текущей транзакции, а также строки, время удаления которых больше текущего номера версии - > строки, которые не были удалены до текущей версии транзакции.
  • При обновлении данных: скопировать строку а' на основе исходной строки а, время удаления строки а устанавливается равным текущему номеру версии транзакции, а время создания строки а' устанавливается равным текущему номеру версии транзакции.
  • При вставке данных: время создания записи — номер текущей версии транзакции.
  • При удалении данных: Время удаления записи — номер текущей версии транзакции.

Как появился дедлок, и напишите простой пример?

Причина взаимоблокировки заключается в том, что две транзакции ждут, пока друг друга освободит друг друга, что приводит к циклическим зависимостям.обнаружение взаимоблокировки(круговая зависимость обнаружила ошибку возврата) итайм-аут взаимоблокировки(откатите транзакцию, которая содержит наименьшее количество блокировок строк с течением времени), чтобы максимально избежать взаимоблокировок. Например:

行锁:

UPDATE `table_demo` SET `a` = 'test' WHERE `b` = 'lalala';
UPDATE `table_demo` SET `b` = 'test' WHERE `a` = 'lalala';

UPDATE `table_demo` SET `b` = 'test' WHERE `a` = 'lalala';
UPDATE `table_demo` SET `a` = 'test' WHERE `b` = 'lalala';

Что такое кластеризованные и некластеризованные индексы?

  • Кластеризованный индекс: InnoDB, сохраняется конечный узел дерева B+.Фактические данные.
  • Некластеризованный индекс: MyISAM, сохраняется конечный узел дерева B+.адрес фактических данных.

Что такое индекс покрытия?

Покрывающий индекс: запрашиваемая строка покрывается индексом, который можно прочитать непосредственно из индекса, не возвращаясь к таблице для запроса. Например:

CREATE TABLE `demo_table`(
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `username` char(32) NOT NULL DEFAULT '' COMMENT '用户名',
    `password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
    PRIMARY KEY (`id`),
    KEY `idx_username` (`username`)
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;

explain select `username` from `demo_table` where `username` = 'demo';
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+
| id | select_type | table      | type | possible_keys | key          | key_len | ref   | rows | Extra                    |
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | demo_table | ref  | idx_username  | idx_username | 96      | const |    1 | Using where; Using index |
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+

Использование индекса в Extra означает использование покрывающего индекса.

Каков принцип сопоставления крайнего левого префикса для индексации?

Личное текущее понимание: например, использование совместного индекса, сопоставление слева направо, несоответствие полю индекса или поиск по первому диапазону (между, например, больше, меньше, чем), и эта часть индекса действительна.

Почему InnoDB использует не красно-черное дерево, а дерево B+ в качестве индекса для хранения структуры данных и кратко рисует дерево B+? (В настоящее время мое личное понимание относительно неглубокое, пожалуйста, активно исправьте его~)

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

Каждый узел B-дерева может иметь до n дочерних узлов, корневой узел находится в памяти, и каждый узел применяется только для размера страницы 1. Если каждый узел имеет 100 дочерних узлов, то нам в основном нужна только глубина миллионов Если 3, то можно сохранить => 100^3, что уменьшает количество операций ввода-вывода (размер узла обычно равен размеру страницы на диске).

Существует также «принцип локальности» (после того, как данные запрошены, данные рядом с ними также могут быть запрошены), и, во-вторых, листовые узлы дерева B+ образуют связанный список, так что мы можем легко запросить диапазон данных. Во-вторых, корневой узел и внутренний узел дерева B+ хранят только указатель положения следующего дочернего узла индекса, а данные хранятся только в листовом узле, так что нелистовой узел может иметь больше места для хранения позиции индекса и диапазона индекса. Он может быть как можно больше, так что глубина дерева может быть как можно меньше.

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/2/4/16160b4268560364~tplv-t2oaga2asx-image.image

Эпилог

Последующие исправления и дополнения будут продолжаться.Если что-то не так, вы можете активно меня поправлять, спасибо.