Как спроектировать базу данных для эффективной поддержки нескольких ключевых запросов? - PullRequest
1 голос
/ 25 марта 2012

База данных хранит имя, возраст, зарплату и адрес сотрудника.

Я знаю, что если это запрос с одним ключом, то B + tree - выбор.Как насчет запроса с несколькими ключами, например, я хочу знать всех сотрудников с фамилией Смит и возрастом более 40. Как эффективно поддерживать этот тип запроса?

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

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Я думаю, что составной индекс будет лучшим выбором. Это будет индекс, в котором хранятся данные об имени и возрасте. Таким образом, при обходе дерева после нахождения совпадения по названию ожидающими будут все результаты Смита, которые также будут упорядочены по возрасту.

Итак, общая стоимость - это время, которое потребуется, чтобы найти первого Смита, плюс время, которое требуется, чтобы найти последнего Смита, чей возраст составляет 40 лет или меньше.

1 голос
/ 25 марта 2012

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

0 голосов
/ 25 марта 2012

Под деревом B + я предполагаю, что вы имеете в виду создание индексов.Общее правило заключается в создании индекса только тогда, когда ключ (ключи) уникальны на 95%.Некоторые оптимизаторы запросов игнорируют индексы, которые не следуют этому правилу.Эти бесполезные индексы стоят времени на вставку и место и их следует избегать - они также могут запутать некоторые оптимизаторы.

...