Есть ли разница между отсортированным файлом кучи и файлом кучи с кластеризованным индексом?
Файл отсортированной кучи представляет собой кучу (массивоподобную структуру) с упорядоченными элементами.Это то, что MyISAM
делает с ALTER TABLE … ORDER BY …
или PostgreSQL
делает с CLUSTER
.Вставка новой записи в такую таблицу нарушает порядок.
Кластерный индекс - это B-Tree
.Вставка новой записи сохраняет порядок.
Записи в кластеризованной таблице не обязательно физически упорядочены (в том смысле, что запись с более высоким значением ключа кластеризации имеет большее смещение в файле или табличном пространстве).
Скорее, записи логически упорядочены: вы можете переходить от одной записи к другой по следующим B-Tree
ссылкам (или прямым ссылкам между страницами в случае B+Tree
), но это все еще подразумевает случайный поиск дискапотому что логически связанные страницы не обязательно находятся рядом друг с другом на диске.
Некоторые базы данных, например Oracle
, позволяют считывать индексы в физическом порядке (используя операцию, известную как INDEX FAST FULL SCAN
), что делаетне поддерживает логический порядок, но быстрее из-за преимуществ или последовательного доступа к страницам.
Не существует такого понятия, как «файл кучи с кластеризованным индексом»: организация таблицы является либо кучей, либо кластеризованной.