3

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

+1

Что такое 'Clustered index'? Или почему этот вопрос помечен как «Oracle»? – ibre5041

+2

@Ivan Это концепция Microsoft SQL, Oracle не имеет кластеризованных индексов. Таким образом, вопрос неоднозначен: OP хочет знать, почему индекс создается при добавлении PK? или почему создается «кластеризованный» индекс, который не существует? –

ответ

14

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

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

Oracle не имеет кластерного индекса как MS SQL, однако indexed-organized tables делит некоторые свойства с таблицами с индексированием кластеров. ПК является неотъемлемой частью таких таблиц и должен быть указан во время создания.

(Oracle также имеет table clusters, но это совершенно другая концепция).

+0

Вот почему, когда вы разрабатываете приложения для SQL Server, вы можете сказать 'Select * from table' и Oracle, вам нужно сделать' Select * from table Order By ... '. Потому что, когда вы кластеризованный индекс PK, он сортирует материал для вас автоматически. –

+0

@ t.s. только если вы хотите, чтобы строки, упорядоченные с помощью pk, очевидно =) Также я бы не стал полагаться на естественное упорядочение без предложения ORDER BY: что произойдет, если оптимизатор изменит свой путь/метод доступа? (ответ: вы получите строки из строя) –

+0

Это был просто пример того, что кластеризованный индекс делает вам: o) –

0

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

-1

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

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

Смежные вопросы