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