Где хранятся данные при выполнении SQL-запроса в СУБД?

«Где хранятся данные при выполнении SQL-запроса в СУБД?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При выполнении запроса данные обрабатываются в нескольких областях памяти СУБД:

  1. Постоянное хранилище (Диск):

    • Табличные данные и индексы хранятся в файлах на диске (например, .ibd в InnoDB).
  2. Оперативная память (RAM) — ключевая для производительности:

    • Буферный пул (Buffer Pool / Cache): Кэширует страницы данных с диска для быстрого чтения и записи.
    • Кэш запросов (Query Cache): (Устарел в современных MySQL) Хранил результаты запросов.
    • Sort Buffer / Join Buffer: Временные области для операций сортировки (ORDER BY) и соединения (JOIN).
    • Бинарные логи (Binlog Cache): Кэширует изменения перед записью в бинарный лог.
  3. Процесс выполнения запроса:

    • План выполнения строится оптимизатором.
    • Данные считываются из буферного пула (или диска, если нет в кэше) в рабочие области памяти для фильтрации (WHERE), сортировки и агрегации.
    • Результат возвращается клиенту, часто через буфер на стороне СУБД или клиента.