Физически ли отсортированы записи таблицы с кластеризованным индексом по ключу кластеризации?

#rdbms #database

#rdbms #База данных

Вопрос:

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

Комментарии:

1. Это зависит от используемой базы данных и внутреннего хранилища. (Обновление вопроса, чтобы быть более конкретным в отношении среды, вероятно, даст лучшие ответы). Но обычно ключ, используемый для кластеризации, влияет на расположение физических данных.

Ответ №1:

Есть ли разница между отсортированным файлом кучи и файлом кучи с кластеризованным индексом?

Отсортированный файл кучи — это куча (структура, подобная массиву) с упорядоченными элементами. Это то, что MyISAM делает с ALTER TABLE … ORDER BY … или PostgreSQL делает с CLUSTER . Вставка новой записи в такую таблицу нарушает порядок.

Кластеризованный индекс — это B-Tree . Вставка новой записи сохраняет порядок.

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

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

Некоторые базы данных, Oracle например, позволяют считывать индексы в физическом порядке (используя операцию, известную как INDEX FAST FULL SCAN ), которая не поддерживает логический порядок, но быстрее из-за преимуществ или последовательного доступа к страницам.

Не существует такого понятия, как «файл кучи с кластеризованным индексом»: табличная организация является либо кучной, либо кластеризованной.