当我在oracle表中创建主键时,为什么默认情况下会创建一个“聚簇”索引。在创建主键时自动创建聚簇索引的原因是什么?是不是只有甲骨文设计师的偏好才是他以这种方式设计oracle?
答案 0 :(得分:15)
Oracle将创建一个索引来监控唯一约束,其中没有预先存在的索引是合适的。如果没有索引,只要有人试图插入或删除行(或更新PK),Oracle就需要序列化操作(例如表锁)。
与MS-SQL Server相反,此索引在堆表(默认表组织)上不是群集,即此索引不会更改基础表结构和自然顺序。当Oracle创建索引时,不会重新排序行。索引将是B-tree index,并且将作为单独的实体存在,其中每个条目都指向主表中的一行。
Oracle没有聚集索引作为MS SQL,但是indexed-organized tables与聚簇索引表共享一些属性。 PK是此类表的组成部分,必须在创建期间指定。
(Oracle也有table clusters,但它们是一个完全不同的概念。)
答案 1 :(得分:0)
创建索引是主键的基本功能,它也在SQL Server和MySQL中,聚集索引使您的搜索速度更快。
答案 2 :(得分:-1)
数据库引擎自动创建唯一索引以强制执行PRIMARY KEY约束的唯一性。如果表上尚不存在聚簇索引或未显式指定非聚簇索引,则会创建唯一的聚簇索引以强制执行PRIMARY KEY约束。
阅读本文: http://www.sqlskills.com/blogs/kimberly/the-clustered-index-debate-continues/