Индексные предложения
В качестве теоретического вопроса о базе данных, если вас спросят "какие индексы вы бы предложили и почему?" ответы от 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-деревьями, кластеризованными и т. Д. Первый класс - логический, тесно связанный с тем, как вы используете данные. Остальные детали реализации.