После прочтения буклета MySQL, почему я настоятельно рекомендую его?

MySQL

Эта статья - благословение для отправки, как извинение за мой голубь так долго.

Друзья, я снова вернулся. Прошел уже месяц с момента моего последнего поста. За этот период было много личных мелочей, из-за чего моя статья не обновлялась нормально. Всем извиняюсь.

С прошлой недели я начал читать буклет, который я давно купил в Наггетс: "Понимание того, как работает Mysql от корня". По принципу покупки половины, он всегда был в моих Наггетсах. Ешьте пепел .

До недавнего времени я видел несколько групп обмена Java.MVCCЭтот термин неоднократно появляется на моей временной шкале, и я знаю, что это напоминание мне о необходимости разобраться в знаниях, связанных с Mysql.

Так что я провел неделю, читая этот буклет от начала до конца, и некоторые главы, возможно, были прочитаны четыре или пять раз.Я думаю, что понимаю 1/3 знаний в этом буклете, мне действительно стыдно, это меньше половины это потому, что этот буклет, который утверждает, что понимает Mysql с нуля, включает в себя множество понятий, и очень сложно разобраться во всех них всего за одну неделю.

В целом, это хорошая книга с хорошим соотношением цены и качества.По содержанию написанного видно мастерство автора, и его стоит дважды почистить. (Эта книга, кажется, готова к публикации в Механике. Было сказано, что прошло полгода, и предполагается, что это будет в течение месяца~)

Я здесь не для того, чтобы написать эссе или порекомендовать его, я просто делюсь своими впечатлениями от прочтения этой книги в последнее время. Эта книга очень подходит для конференций.CRUDНо студенты, которые мало что знают о Mysq.

Просто нарисуйте карту, чтобы показать всем, о чем эта книга:

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

InnoDB

Если вы прочитали этобуклет, вы можете обнаружить, что первые четыре главы посвящены некоторому базовому содержанию, такому как запуск Mysql-Server, использование Mysql-Client для подключения и изменение набора символов, поэтому я не помечал эту часть на карте, там вы наверное можно понять.

После этих основ начинается первое твердое блюдо буклета:Исследования по принципу InnoDB.

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

Автор начинает с записи и рассказывает нам метод управления данными внутри InnoDB:

Запись таблицы базы данных будет храниться в формате, называемом форматом записи.В качестве примера 5.7 перечислены различные структуры композиции и характеристики четырех форматов строк в MySQL.

После того, как формат записи закончен, давайте поговорим о том, где размещается формат записи? Формат записи помещается в файл с именемС точки зрения структуры данных, в MySQL есть много разных страниц для разных целей.

Каждая страница имеет размер 16 КБ., MySQL использует страницы в качестве основной единицы при чтении или сохранении данных, что означает, что за один раз будет считано или сохранено минимум 16 КБ данных.

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

После того, как страница закончена, кому она принадлежит? Представлен снова表空间Концепция чего-либо.

Таблице соответствует файл табличного пространства (имя таблицы.ibd), файл табличного пространства — это файл, в котором фактически хранятся данные, записи данных управляются страницей, а страница управляется табличным пространством, это послойная прогрессивная принадлежность.

Однако, поскольку использование табличного пространства для непосредственного управления страницами может занимать слишком много места (одно табличное пространство соответствует всем табличным данным, а страница занимает всего 16 КБ, данные немного больше, то есть табличное пространство соответствует десяткам тысяч или даже сотням тысячи страниц), поэтому табличное пространство внутри еще более многоуровневое:区和组.

Одной области соответствует 64 страницы (64*16=1МБ), а одной группе (256МБ) соответствует 256 областей.После этого деления логическая принадлежность становится:Записи -> Страницы данных -> Области -> Группы -> Табличные пространства.

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

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

На этом основной принцип InnoDB в основном закончился.Самая сложная часть этой части - часть табличного пространства, потому что она включает в себя такие вещи, как индексы.Можно сказать, что раздел табличного пространства является самой сложной частью весь буклет Я думаю, то же самое в разделе комментариев буклета.

показатель

Когда я читал буклет, у меня изначально была идея прочитать указатель, но я не ожидал, что указатель будет очень коротким и будет состоять всего из двух глав: «Принцип указателя» и «Использование указателя».

На самом деле, когда я читаю буклет, я обычно смотрю на него в сравнении.Прочитав то, что написал автор, я иду в Интернет, чтобы прочитать то, что написали другие, и объединить то и другое, чтобы понять.

То же самое относится и к индексу, но то, что написал автор, действительно легко понять.Индекс предназначен для сортировки первичного ключа на основе записей строк.Поскольку первичный ключ упорядочен, первичный ключ используется в качестве узла для образуют узел.B+树, все листовые узлы этого дерева B+ являются записями, а неконечные узлы — это нечто, называемое деревом каталогов, которое можно понимать как группировку конечных узлов.Поскольку это дерево B+, бинарный поиск можно использовать очень быстро.Найти соответствующий узел.

Этот тип нелистового узла называется непосредственно индексом данных записи строки.聚簇索引, этот индекс будет автоматически сгенерирован в InnoDB, а поскольку все его конечные узлы являются записями, он также занимает очень много места.

Индекс, который мы генерируем вручную, называется вторичным индексом/вспомогательным индексом.После того, как этот индекс будет сгенерирован, он также сформирует дерево B+, но конечный узел этого дерева не записывает данные строки, а записывает первичный ключ соответствующих данных строки. , После того, как первичный ключ получен из первичного индекса, данные должны быть снова найдены с первичным ключом.Этот процесс называется回表.

Если при создании вторичного индекса указано несколько столбцов, индекс называется覆盖索引.

Помимо этих авторов, они такжеMyISAM的索引, он не имеет кластеризованного индекса, это вторичный индекс, но вторичный индекс несколько отличается от InnoDB.Индекс MyISAM записывает не первичный ключ, а номер строки.Вы можете напрямую найти соответствующие данные, сравнив номер строки .Это сохраняет процесс таблицы возврата.


После понимания индекса гораздо проще взглянуть на меры предосторожности при использовании индекса~, такие как:

  1. Тип столбца индекса должен быть как можно меньше (уменьшите пространство, занимаемое индексом).
  2. Удалить повторяющиеся и избыточные индексы в таблице (для столбца индекса используется только один индекс)
  3. Первичный ключ базы данных является самоинкрементным (чтобы избежать беспорядка первичного ключа, который будет часто нарушать работу узлов дерева B+, поскольку дерево B+ сортируется по первичному ключу)
  4. Где условия пытаются индексировать поля в том же порядке, что и при создании объединенного индекса (поскольку создание покрывающего индекса сортируется слева направо в соответствии с несколькими значениями полей индекса).
  5. Нечеткое сопоставление указывает, что левый префикс может использоваться для индекса (поскольку значение индекса сортируется слева направо, поэтому, если указано левое значение, индекс также может использоваться для сужения диапазона)

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

Как получить доступ к одной таблице

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

Это некоторые вещи, которые вы знаете и понимаете, потому что это своего рода правила, и эта частьExplainпредзнаменование,ExplainИспользуйте знания здесь.

Explain

Информация об объяснении также очень ясна в онлайн-блоге, потому что это все концептуальные знания Когда я раньше изучал MySQL, в классе Чжоу Яна также обсуждались знания, связанные с объяснением.

Он в основном перечисляет, какие индексы используются оператором запроса и сколько строк затронуты.Лично я думаю, что это не очень полезно, потому что после того, как SQL будет передан исполнителю для выполнения, оптимизатор оптимизирует оптимизированный SQL. Он может отличаться от того, что вы написали изначально, вам нужно понимать процесс оптимизации оптимизатора, чтобы понять это.

В этом случае вы можете использоватьoptimizer_traceПосмотрите на выполнение SQL, чтобы увидеть, что делает оптимизатор.

Вы также можете использовать другие методы, такие как:show status like '%last_query_cost%'

Этот оператор может запрашивать стоимость предыдущего оператора запроса. Когда оптимизатор SQL оптимизирует оператор, он попытается рассчитать стоимость различных решений и, наконец, использовать решение оптимизации с наименьшими затратами. Я думаю, что этот метод можно сравнить. Интуитивно сравните разрыв в производительности между двумя написанными вами SQL-запросами.

Оптимизация подзапросов

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

дела

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

В делах много понятий, КИСЛОТА обсуждаться не буду.Поскольку это книга о принципах, перо и тушь автора в основном используются вКакую схему использует MySQL для обеспечения транзакций и отката транзакций?.

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

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

MVCC(Mutil-Version Concurrency Control)- Многоверсионный контроль параллелизма, который является решением, используемым в MySQL для решения проблемы одновременного чтения и записи.

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

Здесь мы снова рассмотрим эти четыре концепции:

  1. 脏写: транзакция изменяет данные, измененные другой незафиксированной транзакцией.
  2. 脏读: транзакция прочитала данные, которые не были зафиксированы и изменены другой транзакцией.
  3. 不可重复读: транзакция может прочитать значение, измененное другими транзакциями, после открытия транзакции.
  4. 幻读: когда запрашиваются два идентичных условия запроса в транзакции, данные, считанные позже, больше, чем предыдущие.

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

Грязная запись обычно выполняется блокировками, то есть только одна транзакция записывает запись в определенный момент времени, чтобы избежать грязной записи.

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

Когда некоторые люди интерпретируют MVCC в Интернете, они говорят, что это版本链+乐观锁,после прочтения буклета обратился к исходникам этой штуки в MySQL в интернете.Как и буклет,определяется расчетом(или суждением)какую версию смотреть.Оптимистичные блокировки вообще относительно новые.значение и старое значение , реальная ситуация не очень похожа на оптимистическую блокировку.

Прочитав транзакцию, я обнаружил, что база данных часто запрашиваетMVCCЭто не так загадочно, можно сказать, что это можно сказать одним предложением. И тут я вдруг вспомнилseataРежим AT этой распределенной транзакции, его принцип на самом деле почти такой же, как принцип транзакции в MySQL.

Замок

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

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

На самом деле блокировки можно разделить на два измерения: степень детализации и характеристики. (Конечно, это мое собственное понимание)

  • 粒度: По степени влияния его можно разделить на уровень строки и уровень таблицы.
  • 特性: По характеристикам замок можно разделить на эксклюзивный или общий.

Обычно существует четыре типа комбинации двух измерений: эксклюзивные блокировки на уровне строк, общие блокировки на уровне строк, эксклюзивные блокировки на уровне таблиц и общие блокировки на уровне таблиц.

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

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

резюме

Эту статью мне очень неловко писать, потому что есть много знаний, которые я хочу написать и не могу написать (содержание статьи может состоять только из 30% знаний из буклета максимум), так что я изначально хотел логически рассказать вам подробно.Говоря о содержании этого буклета, но я должен избежать подозрений (нарушение прав, плагиат), и, наконец, я чувствую себя немного антиклиматическим (очень рекомендую просмотреть мою карту).

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

В общем, этот буклет рекомендуется. Это книга, которая углубляется в принципы. Некоторые точки знаний, такие какbin logЭтот тип частичного прикладного уровня не упоминается, а остальные в основном очень подробны.Использование кода купона брошюры должно стоить менее 20 юаней, что очень выгодно.

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

  • Просто подпишитесь на мой одноименный официальный аккаунт (и уши),Ответить抽奖Существует эксклюзивная ссылка на лотерею, и лотерея будет разыграна в 12:00 1 октября.
  • И мой файл карты разума MySQL, ОтветитьMySQLКлючевые слова могут получить карту мозга.

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