2010-05-21 3 views
15

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

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

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

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

+0

См. Также: http://stackoverflow.com/questions/751236/relational-databases-there-has-to-be-more-right –

ответ

12

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

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

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

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

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

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

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

который адресует тот же вопрос.

+2

Избранное в вашем блоге и просто распечатайте свою статью, чтобы прочитать на поезде Главная; благодаря! – Pierreten

2

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

[1] Х. Гарсиа-Молина, внедрение системы баз данных, Prentice Hall, 2000

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

5

В общем смысле, для многих РСУБД:.

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

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

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

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

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

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

3

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

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

Смежные вопросы