【问题标题】:USING index clause使用索引子句
【发布时间】:2014-06-08 05:42:31
【问题描述】:

我在一个db补丁中看到了如下语句:

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

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

我的问题真的是,究竟会发生什么? db 是否在这里使用一些默认值?在默认表空间中为 PK 创建索引?我认为默认情况下会为每个 pk 创建一个索引...

【问题讨论】:

  • 语句是否也包含索引名称?我的意思是它是 ALTER TABLE tablename ADD PRIMARY KEY (somepk_columnname) USING INDEX index_name 吗?另外,您使用 Oracle 吗?
  • 是的,我们使用 Oracle,但没有指定名称。所以根据 Lajos 的回答,它有一个默认名称。

标签: sql oracle indexing


【解决方案1】:

上面的回复很有帮助,但我也想为我的唯一键使用特定的表空间。这对我有用:

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

【讨论】:

  • 你能详细解释一下吗?
【解决方案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 会创建索引。在这种情况下:

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

如果表是分区的,那么您可以为唯一或主键约束指定本地或全局分区索引。

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多