Как работают реляционные базы данных под капотом?

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

Что действительно происходит?

Я уверен, что это имеет какое-то отношение к тому, как значения регулярно выкладываются в памяти, подобно массиву; но помимо этого, я не знаю многого другого.

Как SQL обрабатывается таким образом, чтобы облегчить все это?

Ответы

Ответ 1

Двигатель строит такой план запросов.

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

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

  • В MySQL и PostgreSQL вы добавляете свой запрос со словом EXPLAIN

  • В SQL Server вы запускаете SET SHOWPLAN_TEXT ON перед запуском запроса или просто нажмите Ctrl-L в Studio Management Studio

  • В Oracle вы добавили запрос с помощью EXPLAIN PLAN FOR, а затем выпустили SELECT * FROM (dbms_xplan.display)

Вы можете найти эту статью в своем блоге:

в котором рассматривается тот же вопрос.

Ответ 2

В базовом смысле для многих СУБД:

a) Этап анализа синтаксиса принимает входные данные от настройки сервера (сокеты, что угодно) и превращает этот SQL в действительную AST или другую промежуточную форму.
b) Затем он передает эту информацию в механизм хранения, который превращает это описание запроса в набор поисков по индексам, таблицам, разделам, реплицированным данным и другим элементам, которые составляют семантику хранения схемы c) Затем движок возвращает набор данных, который затем предоставляется клиенту в любой форме (XML, CSV, конкретный клиент).

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

В действительности RDBM содержат все виды структур из компьютерных наук... и каждый из них имеет высокоразвитые и специализированные методы для перевода подразумеваемой семантики SQL в конкретное хранилище.

Подумайте, как разные MySQL и Oracle... или PostgreSQL и Microsoft SQL. Они все пытаются выполнить какую-то общую SQL-подобную спецификацию... но как эта спецификация выполняется, она разнообразна.

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

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

Ответ 3

Я уверен, что это имеет какое-то отношение к тому, как значения регулярно выкладываются в памяти, подобно массиву; но помимо этого, я не знаю многого другого.

Вы также можете посмотреть статьи на B + Trees. Что используются основные реляционные базы данных структуры данных.

Ответ 4

Вы можете прочитать эти книги:

[1] H. Garcia-Molina, Внедрение системы баз данных, Prentice Hall, 2000

[2] Р. Эльмас, С. Б. Навате, Основы систем баз данных, Издание Бенджамина/Каммингса. Comp., Inc, 1994