В качестве теоретического вопроса о базе данных, если вас спросят, какие индексы вы бы предложили и почему? это ответы от primary
, clustering
и secondary
индекс? Как мы узнаем, стоит ли вводить один из них vs a B-Tree
?
Это должно быть сделано с точки зрения упрощенного индексирования, о чем я спрашиваю из-за материала курса, связанного с индексами, где я рассмотрел некоторые вводные материалы.
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-деревьями, кластеризованными и т. Д. Первый класс является логическим и тесно связан с тем, как вы используете данные. Остальные - детали реализации.