Назад | Перейти на главную страницу

Предложения по индексам

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