От запроса до результата: как работает SQL-движок SQL-движок — это логический уровень между пользователем и данными в базе, который отвечает за обработку запроса и формирование результата. Но как он это делает? Один из авторов проекта Dolt (как его описывают сами разработчики — БД, которая работает, как репозиторий на GitHub) написал целую статью про опыт работы с их движком go-mysql-server. Хотя акцент именно на этот движок, он также рассказывает про разные подходы и принципы работы SQL-движков в целом. Если кратко: 🔵Выполнение запроса можно разделить на 7 шагов — парсинг, привязка к данным в БД, упрощение плана выполнения, оптимизация порядка выполнения джойнов, оценка эффективности плана, выполнение, вывод результатов. 🔵Сначала движок проверяет корректность запроса. Он формирует абстрактное синтаксическое дерево на этапе парсинга, а затем сопоставляет его с данными в базе. 🔵Если запрос был составлен правильно, то движок начинает формировать оптимальный план работы — наиболее быстрый и требующий минимально необходимое количество ресурсов, с учетом всех функций, джойнов и агрегаций. Для этого он старается как можно скорее «отбросить» все строки и колонки, которые не нужны в запросе, а также просчитывает разные варианты выполнения и выбирает самый быстрый. 🔵В конце концов, движок конвертирует выбранный план в исполняемый формат и выдает юзеру долгожданный результат. Автор каждый пункт разбирает подробно — как движок парсит запрос, с какими сущностями в БД сопоставляет на стадии привязки и как подбирает оптимальный способ выполнения запроса, еще и с картинками. В общем, почитать любопытно, даже если с Dolt работать не планируете.