Хранилище кластерного индекса
Кластерные индексы в основном работают точно так же, как и все остальные индексы - они хранятся в варианте структуры, называемом B-Tree . Они хранятся в тех же файлах и в тех же форматах, что и все ваши другие таблицы в SQL Server.
Концепция
Отойдите назад и подумайте о данных, которые вы индексируете. (Я хочу, чтобы вы подумали о книге по этой аналогии). Что если в дополнение к указателям в конце книги вы также упорядочили данные внутри книги? Вы можете искать информацию намного быстрее. Возьмем, к примеру, телефонную книгу, в которой все данные упорядочены по фамилии и имени. Вам не нужно идти в конец телефонной книги, чтобы найти чей-то номер. Сравните это с книгой по истории, где вам нужно перейти к указателю в конце книги, чтобы найти то, что вы хотите.
Таким образом, логически кластерный индекс (или «организованная по индексу таблица» в Oracle) - это ваши данные, но отсортированные. Физически, листовые узлы B-дерева содержат все данные вашей таблицы в отсортированном порядке. Это действительно полезно, когда вы сканируете данные в своей таблице в непрерывном диапазоне, таком как диапазон дат.
Еще одна важная вещь о кластеризованных индексах (по крайней мере, в SQL Server) заключается в том, что столбцы кластеризации (то есть столбцы, составляющие порядок сортировки кластерного индекса) включены в конце каждого некластеризованного индекса, определенного вами в Таблица. Это делает поиск для ваших столбцов кластеризации очень быстрым, и это часто очень желательно в базах данных OLAP.
Некластеризованные индексы
Ваш стол может храниться только в одном физическом порядке. Но в определенные моменты вам нужно искать данные другими способами. Для этих сценариев вы используете некластеризованный индекс. Это также реализовано в виде B-дерева, но оно не имеет никакого отношения к порядку данных вашей таблицы, как это делает кластерный индекс. Это означает, что если вам нужны данные из вашей таблицы, которые не включены в некластеризованный индекс, SQL Server должен будет физически просмотреть данные в вашей таблице, чтобы получить то, что вы хотите. Это еще одна операция, и для многих запросов она может быть дорогостоящей и является ключевым соображением при оптимизации ваших таблиц.
Слово
Вы могли бы написать книгу об этом материале. У многих есть. Если я еще не скучал до смерти, загляните на страницу B-Tree в Википедии. Начни там. Если вы все еще (действительно) заинтересованы, я предлагаю на самом деле запрограммировать простое B-Tree, чтобы вы могли видеть, что с этим связано. И, если вы хотите узнать еще более подробные сведения о том, как точно хранит все это в SQL Server, посмотрите Inside SQL Server Калена Делани: Механизм хранения . Является ли все это обучение излишним? Это вам решать. Но чем больше вы изучаете это, тем более комфортно вам будет заниматься разработкой БД и тем быстрее будут работать ваши системы. Я обещаю.