Что означает это предложение: кластерные индексы хранятся физически на столе?

Как кластеризованные индексы хранятся на жестком диске? Что такое логический порядок?

Как работают некластеризованные индексы?

Ответы

Ответ 1

Это означает, что данные в таблице хранятся в B-Tree в соответствии с порядком CLUSTERED PRIMARY KEY (или столбцами кластеризации).

Это имя, на мой взгляд, немного запутанно. Та же концепция в Oracle называется index-organized table, которую я нахожу гораздо более описательной.

Некластеризованные индексы содержат значение индексированных столбцов вместе с указателем на запись, из которой они созданы.

"Сгруппированный индекс" - это сама таблица; "некластеризованный" индекс является упорядоченной копией некоторых столбцов таблицы.

Если вы создадите кластерный индекс, таблица будет перегруппирована. Поэтому у вас не может быть более одного "кластеризованного индекса" в таблице: таблица не может быть организована более чем в одном порядке.

Если вы создаете вторичный индекс, создается теневая копия таблицы, сохраняя значения индексированных столбцов и указатели на записи, из которых они сделаны. Всякий раз, когда таблица изменяется, копия также изменяется (двигатель автоматически об этом заботится).

Некластеризованная таблица

id   col1   value
--   --     --
1    1      Data 1
6    1      Data 6
3    1      Data 3
7    2      Data 7
9    2      Data 9
5    2      Data 5

Таблица не упорядочена.

Кластерная таблица

id   col1   value
--   --     --
1    1      Data 1
3    1      Data 3
5    2      Data 5
6    1      Data 6
7    2      Data 7
9    2      Data 9

Таблица упорядочена на id.

Кластеризованная таблица со вторичным индексом

Table                      Index
id   col1   value          col1   id
--   --     --             --     --
1    1      Data 1         1      1
3    1      Data 3         1      3
5    2      Data 5         1      6
6    1      Data 6         2      5
7    2      Data 7         2      7
9    2      Data 9         2      9

Таблица является заказером на id, индекс упорядочен по (col1, id)

Ответ 2

Для некластеризованных индексов создается отдельный файл, в котором хранятся только поля индекса, в которых есть записи, помещенные в порядок логического индекса. Для кластерного индекса нет отдельного файла - данные из самой таблицы (все поля) помещаются в логический порядок индекса.

Это ускоряет поиск индекса (хотя он действительно лучший из индексов, таких как даты, когда вы будете искать диапазон). Это также делает вставки довольно медленными, запись будет вставлена ​​посередине.

Ответ 3

Это означает, что кластеризованный индекс определяет физический порядок, в котором фактически хранятся записи в таблице. Некластеризованные индексы - это просто списки значений ключей, хранящихся отдельно, которые позволяют быстро выполнять поиск в других порядках, чем кластерный/физический порядок.

Быстрый пример: таблица с ID (первичный ключ), FirstName, LastName и Car, содержащий три человека: 0 = Stig (Llana), 1 = Джереми Кларксон (DB9), 2 = Ричард Хаммонд (911), 3 = Джеймс Мэй (Lambo) и кластеризованный индекс на LastName, а некластеризованный индекс на Car будет хранить фактические строки данных в таблице в этом физическом порядке на диске:

ID FirstName LastName Car
1  Jeremy    Clarkson DB9
2  Richard   Hammond  911
3  James     May      Lambo
0  The       Stig     Llana

Некластеризованный индекс также сохранит что-то вроде:

Car   ID
911   2
DB9   1
Lambo 3
Llana 0

Ответ 4

Кластеризованное хранилище индексов

Кластерные индексы в основном работают точно так же, как работают все другие индексы - они хранятся внутри варианта struture, называемого B-Tree. Они хранятся в одних и тех же файлах с теми же форматами, что и все остальные таблицы в SQL Server.

Концепция

Вернитесь назад и подумайте о данных, которые вы индексируете. (Я хочу, чтобы вы подумали о книге в этой аналогии). Что делать, если в дополнение к индексам в конце книги вы также заказали данные внутри книги? Вы могли быстрее искать информацию. Возьмем, к примеру, телефонную книгу, где все данные упорядочены по фамилии и имени. Вам не нужно заходить в телефонную книгу, чтобы найти номер. Сравните это с книгой истории, где вам нужно перейти к индексу в конце книги, чтобы найти то, что вы хотите.

Итак, логически, кластеризованный индекс (или "упорядоченная по индексу таблица" в Oracle) - это ваши данные, но отсортированные. Физически узлы листа B-дерева содержат все ваши данные таблицы в отсортированном порядке. Это действительно полезно при сканировании данных в вашей таблице на непрерывном диапазоне, например в диапазоне дат.

Еще одна важная вещь в кластеризованных индексах (по крайней мере, в SQL Server) заключается в том, что столбцы кластеризации (то есть столбцы, которые составляют порядок сортировки кластерного индекса) включаются в конце каждого некластеризованного индекса, который вы определяете на своем Таблица. Это значительно ускоряет поиск столбцов кластеризации, и это часто очень желательно в базах данных OLAP.

Некластеризованные индексы

Ваша таблица может храниться только в одном физическом порядке. Но в определенные моменты вам нужно искать данные другими способами. Для этих сценариев используется некластеризованный индекс. Это также реализовано как B-Tree, но оно не имеет никакого отношения к порядку ваших данных таблицы, как это делает кластерный индекс. Это означает, что если вам нужны данные из вашей таблицы, которые не включены в ваш некластеризованный индекс, SQL Server придется физически искать данные в вашей таблице, чтобы получить то, что вы хотите. Это еще одна операция, и для многих запросов может быть дорогостоящим и является ключевым соображением при оптимизации таблиц.

Слово

Вы можете написать книгу об этом. У многих есть. Если мне уже не надоели вас, посетите страницу Wikipedia B-Tree. Начните там. Если вы все еще (действительно) заинтересованы, я предлагаю на самом деле программировать простое B-Tree, чтобы вы могли видеть, что участвовало. И, если вы хотите узнать еще более подробную информацию о том, как именно SQL Server сохраняет все это, проверьте Kalen Delaney Внутри SQL Server: механизм хранения. Является ли все это чрезмерным обучением? Это вам решать. Но чем больше вы изучаете это, тем более комфортно вы будете с развитием БД, и тем быстрее станут ваши системы. Я обещаю.

Ответ 5

это означает, что таблица упорядочена, как указано для кластерного индекса. Негрупповой индекс физически хранится отдельно.

Ответ 6

Первичные индексы не являются технически "кластеризованными" индексами, хотя оба они приводят к упорядочению физических данных к данным. Разница очевидна в их самих именах. Первичный индекс имеет дело с первичными ключами. Значение, каждый первичный ключ должен быть уникальным (иначе он не был бы первичным ключом). Индекс кластеризации имеет дело с чем-либо, что не является первичным ключом и по определению может быть не уникальным. Отсюда и происходит слово "кластер". Если вы сортируете данные, которые не являются первичными, это означает, что он может повториться. Когда повторяющиеся данные появляются вместе, это считается "кластером".