Индексные предложения
В качестве теоретического вопроса о базе данных, если вас спросят "какие индексы вы бы предложили и почему?" ответы от primary
, clustering
а также secondary
индекс? Как бы мы узнали, если бы мы представили один из этих против B-Tree
?
Это должно быть с точки зрения упрощенной индексации, как я спрашиваю из-за материала курса, относящегося к индексам, где я рассмотрел некоторые вводные материалы.
1 ответ
primary
а также secondary
индексы ортогональны b-tree
а также hash
индексы, и оба они ортогональны clustered
а также non-clustered
индексы.
Первый класс индексов - это логические индексы. Они являются индикаторами высокого уровня о структуре ваших данных. Первичный ключ должен однозначно идентифицировать ваши данные, что означает, что он должен быть одним из того, что теория баз данных отношений называет "ключом-кандидатом". Вторичные индексы предназначены для ускорения запросов к другим полям, отличным от основного индекса, и они не должны быть ключами-кандидатами.
Второй класс - это конкретные реализации индекса, пригодные для слегка отличающихся запросов.
b-tree
может выполнять запросы диапазона (WHERE c > 3 AND c < 7
) которыйhash
не могу.hash
Тем не менее, O(1) (постоянное время) в среднем случае для точных запросов (WHERE c = 5
), в то время какb-tree
всегда O (LG N) (логарифмическое время).b-tree
а такжеhash
это четко определенные структуры данных, но они имеют очень мало общего с вашими фактическими данными.Третий класс определяет, будет ли вся таблица отсортирована на диске по порядку сортировки индекса. Если это так, это называется
clustered
индекс.
Как вы можете видеть, индекс может быть primary clustered b-tree
или primary clustered hash
или какая-то другая комбинация, взятая из этих трех разных классов.
Если бы вас спросили, какие индексы ввести, ответ был бы в первую очередь из первого класса. Вопрос наверное о схеме. Это, по крайней мере, ваша отправная точка. Только когда вы решили, какие индексы вводить, вам нужно подумать о том, должны ли они быть b-деревьями, кластеризованными и т. Д. Первый класс - логический, тесно связанный с тем, как вы используете данные. Остальные детали реализации.