Что база данных на самом деле сделать, чтобы выяснить, что соответствует выберите заявление?
Чтобы быть грубым, это вопрос грубой силы. Просто он читает каждую запись кандидата в базе данных и сопоставляет выражение с полями. Итак, если у вас есть «выбрать * из таблицы, где name = 'fred», она буквально пробегает каждую запись, захватывает поле «имя» и сравнивает ее с «fred».
Теперь, если поле «table.name» индексируется, база данных (вероятно, но не обязательно) сначала использует индекс, чтобы найти записи кандидатов для применения фактического фильтра.
Это уменьшает количество записей кандидатов для применения выражения, иначе оно просто сделает то, что мы называем «сканирование таблицы», т. Е. Читаем каждую строку.
Но в принципе, однако, он находит записи кандидатов отдельно от того, как он применяет фактическое выражение фильтра, и, очевидно, есть некоторые умные оптимизации, которые могут быть выполнены.
Как база данных интерпретирует объединение по-разному на запрос с несколькими «где key1 = key2» заявления?
Ну, соединение используется для создания новой «псевдо-таблицы», на которой применяется фильтр. Таким образом, у вас есть критерии фильтра и критерии соединения. Критерии присоединения используются для создания этой «псевдо-таблицы», а затем фильтр применяется к этому. Теперь, когда интерпретируется соединение, это опять та же проблема, что и сравнение фильтров - грубая сила, и индекс читает, чтобы построить подмножество для «псевдо таблицы».
Как хранить всю свою память ?
Одним из ключей к хорошей базе данных является то, как он управляет своими буферами ввода-вывода. Но он в основном соответствует блокам RAM для блоков диска. С современными менеджерами виртуальной памяти более простая база данных может почти полагаться на виртуальную машину в качестве менеджера буфера памяти. Высококачественные БД все это делают сами.
Как хранятся индексы?
B + Деревья обычно, вы должны посмотреть его. Это простая техника, которая существует уже много лет. Это выгодно для большинства сбалансированных деревьев: последовательный доступ к узлам, плюс все узлы листа связаны, поэтому вы можете легко переходить от узла к узлу в порядке очереди. Таким образом, с индексом строки можно считать «отсортированными» для определенных полей в базе данных, и база данных может использовать эту информацию для оптимизации. Это отличается от, скажем, использованием хеш-таблицы для индекса, что позволяет быстро перейти к определенной записи. В B-Tree вы можете быстро получить не только определенную запись, но и точку в отсортированном списке.
Фактическая механика хранения и индексирования строк в базе данных действительно довольно проста и понятна. Игра управляет буферами и преобразует SQL в эффективные пути запросов, чтобы использовать эти основные идиомы хранения.
После этого, в дополнение к идиоме хранения, есть целая многопользовательская система, блокировка, протоколирование и транзакция.
С 2015 года существует [эта статья] (http://coding-geek.com/how-databases-work/), которая кажется довольно хорошей. – Piovezan 2016-07-07 13:16:59
Попробуйте http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf и WikiPedia. Это немного большая тема и модели, такие как RDBMS, FLATFILE и т. Д. Парсер действительно один из самых важных компонентов. Спасибо – 2008-10-06 00:52:00