Я всегда интересовался тем, как можно бросить некоторый SQL в базу данных, и это почти мгновенно возвращает результаты организованным способом, не думая об этом как ничто кроме черного квадрата.
Что действительно продолжается?
Я вполне уверен, это имеет некоторое отношение, как значения регулярно размечаются в памяти, подобной массиву; но кроме этого, я еще не знаю много.
Как SQL анализируется способом для упрощения всего этого?
Механизм строит так называемый план запроса.
Это набор алгоритмов, используемых для возврата наборов, которые вы логически описали с помощью запроса SQL
.
Почти каждый механизм позволяет вам увидеть, какой план запроса он построит для определенного запроса.
В MySQL
и PostgreSQL
вы добавляете к запросу слово EXPLAIN
В SQL Server
запускаете SET SHOWPLAN_TEXT ON
перед запуском запроса или просто нажмите Ctrl-L
в Management Studio
В Oracle
вы добавляете запрос с помощью EXPLAIN PLAN FOR
], а затем введите SELECT * FROM (dbms_xplan.display)
Вы можете найти интересную эту статью в моем блоге:
, в котором рассматривается тот же вопрос.
Вы можете прочитать эти книги:
[1] H. Гарсиа-Молина, Внедрение системы баз данных, Prentice Hall, 2000
[2] R. Элмасри, С. Б. Нават, Основы систем баз данных, The Benjamin / Cummings Publ. Comp., Inc, 1994
Я почти уверен, что это имеет отношение к тому, как значения регулярно размещаются в памяти, подобно массиву; но кроме этого, я больше ничего не знаю.
Возможно, вы также захотите найти статьи о B+ деревьях. Это структура данных, которую используют основные реляционные базы данных.
В основном смысле для многих СУБД:
a) Этап синтаксического анализа принимает входные данные от настройки сервера (сокеты, что угодно) и превращает этот SQL в действительный AST или другой промежуточный форма.
б) Затем он передает эту информацию механизму хранения, который превращает это описание запроса в набор поисков по индексам, таблицам, разделам, реплицированным данным и другим элементам, которые составляют семантику хранения схемы
c) Затем движок возвращает набор данных, который затем предоставляется клиенту в любой форме (XML, CSV, зависит от клиента).
Но нет одного верного ответа . Вы найдете сходство в алгоритмах индексирования, алгоритмах распределения, кэшировании, блокировке и других вещах ... но главное сходство - это языковой интерфейс самого языка SQL. Кроме того, они могут быть реализованы любым способом ... при условии, что их результаты соответствуют ожидаемой семантике входного запроса.
На самом деле RDBM содержат все виды структур из информатики ... и каждая имеет высокоразвитые и специализированные методы для преобразования подразумеваемой семантики SQL в конкретное хранилище.
Подумайте, насколько разные MySQL и Oracle ... или PostgreSQL и Microsoft SQL. Все они пытаются соответствовать какой-то общей спецификации, подобной SQL ... но то, как эта спецификация выполняется, различается.
Механизмы включают в себя все виды экзотики, специальные индексы для определения физического местоположения данных, системы кэширования и многое другое.
Существует тонн баз данных с открытым исходным кодом , таких как MySQL , PostgreSQL и поисковых систем, таких как Sphinx , вы можете посмотреть при их выполнении. Открытый исходный код предназначен для обучения как угодно! Попробуйте найти «наставника», который проведет вас через источник.