Почему первичный ключ автоматически создает кластерный индекс

Когда я создаю первичный ключ в таблице Oracle, почему он создает кластеризованный индекс по умолчанию. В чем причина этого автоматического создания кластерного индекса при создании первичного ключа? Это просто предпочтение дизайнера Oracle, что он разработал оракул таким образом?

3 ответа

Решение

Oracle создаст индекс для отслеживания уникального ограничения, для которого не подходит ранее существующий индекс. Без индекса Oracle должен был бы сериализовать операции (такие как блокировка таблицы) всякий раз, когда кто-то пытается вставить или удалить строку (или обновить PK).

В отличие от MS-SQL Server, этот индекс не кластеризован в таблицах кучи (организация таблиц по умолчанию), то есть этот индекс не изменит структуру таблицы и ее естественный порядок. Строки не будут переупорядочены, когда Oracle создаст индекс. Индекс будет индексом B-дерева и будет существовать как отдельный объект, где каждая запись указывает на строку в основной таблице.

Oracle не имеет кластеризованного индекса как MS SQL, однако индексированные таблицы имеют некоторые общие свойства с индексированными по кластеру таблицами. PK является неотъемлемой частью таких таблиц и должен быть указан при создании.

(Oracle также имеет кластеры таблиц, но они представляют собой совершенно другую концепцию).

Создание индекса - это базовая функциональность первичного ключа, также в SQL Server и MySQL, Clustered Index ускоряет поиск.

Компонент Database Engine автоматически создает уникальный индекс для обеспечения уникальности ограничения PRIMARY KEY. Если кластеризованный индекс еще не существует в таблице или некластеризованный индекс не указан явным образом, создается уникальный кластеризованный индекс для применения ограничения PRIMARY KEY.

Прочитайте это: http://www.sqlskills.com/blogs/kimberly/the-clustered-index-debate-continues/

Другие вопросы по тегам