Разговор о процессе выполнения SQL

задняя часть база данных
Разговор о процессе выполнения SQL

"Это 6-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".


  • Если статья была вам полезна,Добро пожаловать, чтобы подписаться, лайкнуть и добавить в избранное (один клик по трем ссылкам),Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь отправить личное сообщение, мы ответим вовремя!

Введение

  • Привет всем, я Сяочэн, "От 0 до 1 - Всестороннее и глубокое понимание MySQL" прибыл в четвертую главу. Эта глава в основном начинается с начала выполнения SQL и анализирует оператор SQL от простого до Глубокий. Полный поток выполнения на сервер, в конечном итоге достигая "знай это, знай это" цель о.

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

  • Цикл статей «От 0 до 1 — всестороннее и глубокое понимание MySQL» будет постоянно обновляться,Заинтересованные друзья могут подписаться на меня, давайте работать вместе, и вместе добиваться успехов!Если поможете, не забудьте сделать тройную ссылку, ღ(´・ᴗ・` ) по душам!

2. Не Юань, как выполняется SQL


   Несколько дней назад у меня было онлайн-интервью, и на самом деле было довольно много вопросов о базе данных, но меня немного зацепил вопрос интервьюера: он не задавал более распространенные вопросы по базовой грамматике и оптимизации.Но позвольте мне объяснить поток выполнения SQL от клиента к серверу., что меня очень смущает, потому что обычно я сосредотачиваюсь только на вещах прикладного уровня и не очень понимаю более глубокие вещи, поэтому, сталкиваясь с нестандартными проблемами, легко запутаться.Я надеюсь, что каждый может учиться у меня и пытаться достичь «знания правды и знания причины» при изучении знания, чтобы, даже если интервьюер изменит угол вопроса, мы могли лучше ответить на ответ.После болтовни закончился, начинается основной фильм!

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

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



2.1. Модуль обработки соединения:

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

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

2.2, модули парсинга и оптимизации


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

2.2.1, кэш запросов


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

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

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

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

2.2.2, разбор грамматики


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

2.2.3, оптимизация запросов


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

3. Модуль механизма хранения


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

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

4. Расширение


   Мы часто встречаем концепции уровня сервера MySQL и модуля механизма хранения в некоторых обучающих видеороликах или профессиональных статьях. Их конкретные значения заключаются в следующем:

  Для удобства управления функции, не связанные с реальным доступом к данным, такие как обработка/управление соединениями, кэширование запросов, разбор грамматики и оптимизация запросов, разделены на функции слоя Mysql Server.

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


В-третьих, MySQL обрабатывает общие вопросы интервью.


3.1 Порядок выполнения операторов базы данных


  (1): Порядок выполнения

   from -> on -> join -> where -> group by -> count (агрегатная функция) -> наличие -> select -> отдельные -> упорядочивание -> limit

  (2): Объяснение шагов выполнения:

  (1), from: указывает источник данных

  (2), on: Представляет ассоциативную таблицу данных, после выполнения создается временная таблица t1, которая используется для следующей операции

(3), соединение: добавьте данные таблицы соединений во временную таблицу t1, завершенную при выполнении, например: левое соединение, добавьте оставшиеся данные координат во временную таблицу t1, если есть более 3 соединений , повторить дальше.. Шаги между .joins.

  (4), где: В соответствии с переносимыми условиями отфильтровать квалифицированные данные из временной таблицы и сгенерировать временную таблицу t2.

(5), group by: в соответствии с переносимыми условиями временная таблица t2 группируется соответствующим образом и формируется временная таблица t3.Если оператор содержит group by, поля за ним должны появиться в select или в функции агрегирования . , иначе будет сообщено о синтаксической ошибке SQL.

  (6), count и другие агрегатные функции: выполнение операций агрегатной функции над указанными полями во временной таблице для формирования временной таблицы t5.

  (7), имея: отфильтровать данные временной таблицы t3 после группировки и получить временную таблицу t4.

  (8), выберите: Отфильтровать данные, которые должны быть возвращены из временной таблицы, чтобы сформировать временную таблицу t6.

  (9), отдельный: выполнить указанный скрининг дедупликации во временной таблице t6 для формирования временной таблицы t7.

  (10), порядок: отсортировать временную таблицу t7, чтобы сформировать временную таблицу t8.

  (11), ограничение: фильтровать количество возвращаемых данных

   Если вы хотите узнать больше о процессе выполнения, вы можете просмотреть предыдущую статью о разборе процесса выполнения:Вы действительно знаете, как использовать Group by?


В-четвертых, серия статей

  1,Серия «От 0 до 1 — всестороннее и глубокое понимание MySQL» — наиболее подробный процесс установки MySQL (версия для Windows).

  2,Серия «От 0 до 1 — всестороннее и глубокое понимание MySQL» — наиболее подробный процесс установки MySQL (среда Linux).

  3.Серия «От 0 до 1 — всестороннее и глубокое понимание MySQL» — как подключиться к базе данных, если вы забыли пароль для входа в MySQL.

V. Резюме


   Из вышеизложенного мы можем знать, что сервер MySQL делится на: уровень сервера MySQL и уровень механизма хранения. Уровень сервера MySQL в основном отвечает за подключение клиента, анализ грамматики, оптимизацию грамматики и другие операции, а уровень механизма хранения отвечает за доступ к фактическим данным.

   Для полного синтаксического анализа оператора SQL необходимо выполнить следующие шаги:Обработка клиентских и серверных запросов - "Кэш запросов" - "Разбор синтаксиса" - "Оптимизация запросов - "Доступ к данным механизмом хранения" - " Возврат результатов обработки

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