使用索引子句

时间:2014-04-23 11:53:05

标签: sql oracle indexing

我在db补丁中看到了以下语句:

ALTER TABLE tablename ADD PRIMARY KEY (somepk_columnname) USING INDEX;

我想查看USING INDEX在这里做了什么,但只是从谷歌那里得到的,它允许我指定一些存储特定的东西等。

我的问题是,完全在这里发生了什么? db在这里使用了一些默认值吗?在默认表空间中为PK创建索引?我认为每个默认值为每个pk创建一个索引......

2 个答案:

答案 0 :(得分:2)

http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#SQLRF52209

  

使用索引实施约束

     

定义唯一或主键约束的状态时,您可以   指定Oracle用于强制执行约束的索引,或者您   可以指示Oracle创建用于强制执行的索引   约束

     

using_index_clause您只能在指定using_index_clause时使用   启用唯一或主键约束。你可以指定   using_index_clause的任何顺序的子句,但您可以指定   每个条款只有一次。

     

如果指定schema.index,则Oracle会尝试使用指定的索引强制执行约束。如果Oracle找不到索引   或者不能使用索引来强制执行约束,然后Oracle返回   错误。

     

如果指定create_index_statement,则Oracle会尝试创建索引并使用它来强制执行约束。如果是Oracle   无法创建索引或无法使用索引来强制执行   约束,然后Oracle返回错误。

     

如果既未指定现有索引也未创建新索引,则Oracle会创建索引。在这种情况下:

     

索引接收与约束相同的名称。

     

如果对表进行了分区,则可以为唯一键或主键约束指定本地或全局分区索引。

答案 1 :(得分:1)

上面的回复非常有用,但我也想使用特定的表空间来获取我的唯一键。这对我有用:

alter table tablename add constraint uk_name unique (col1, col2) using index tablespace tablespace_name;