Как реляционная база данных организует данные? - PullRequest
0 голосов
/ 10 января 2020

Я думал, что реляционная база данных будет хранить каждый возможный запрос и значения, возвращаемые для этого запроса, в таблице ha sh.

Так, например, если каждая запись в вашей таблице имеет 5 атрибутов, то вы бы сделали копию этого элемента для каждого подмножества из 5 атрибутов, которые появляются в любом данном запросе и должны возвращать эту указанную c запись. , Таким образом, каждая отдельная запись появится в таблице 2 ^ 5 = 32 раза. Кажется, что это было бы очень неэффективно для больших наборов данных с большим количеством записей, но это также позволяет сократить время запроса.

Есть ли в реальных реляционных базах данных смешанная версия, в которой время отклика на запросы / поиски заменяется для большей эффективности памяти? Если так, как это будет реализовано?

1 Ответ

1 голос
/ 10 января 2020

Это не то, как реляционные базы данных хранят данные. Имейте в виду, что это намного больше, чем 2 ^ 32, потому что вы можете создавать запросы с выражениями, а не просто ссылками на столбцы атрибутов. Также запросы, которые являются объединениями, что значительно расширяет возможности.

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

Вместо этого базы данных обычно хранят записи, где запись включает все столбцы одной таблицы. Если вы выполняете запрос, которому нужны только некоторые столбцы, СУБД все равно извлекает всю запись и просто игнорирует столбцы, которые вы не запрашивали. Затем он оценивает любые выражения в вашем запросе. И, наконец, возвращает набор результатов.

MySQL не использует таблицы ha sh для хранения этих записей, он использует структуру данных B + Tree, поэтому поиск записи по первичному ключу занимает O ( журнал n) время.

...