在 oracle 中使用索引与创建索引

Using Index versus Create Index in oracle

我正在使用以下脚本创建一个 table(我使用了 Using index)。

CREATE TABLE TABLE1 (
    C1 VARCHAR2(2 CHAR) NOT NULL ENABLE,
    C2 VARCHAR2(1 CHAR) NOT NULL ENABLE,
    CONSTRAINT TABLE_PK PRIMARY KEY (C1) USING INDEX TABLESPACE SFE_I1
)
TABLESPACE SFE_D1;

在上面的查询中索引会为哪些列创建?

CREATE INDEX IDX_TABLE ON TABLE1 (C1) TABLESPACE SFE_I1;

如果我使用上面的创建索引查询创建索引,它将为 C1 列创建索引。但是这两个脚本有什么区别呢。

以及如果我 运行 这两个查询,应该会发生什么。建议的方法是什么?

如果我的创建 table 脚本包含复合主键并且我正在使用 USING INDEX 关键字,那么将如何创建索引(它会为所有复合列创建一个索引)

对于这个问题,create table 语句的重要部分是 CONSTRAINT TABLE_PK PRIMARY KEY (C1) USING INDEX TABLESPACE SFE_I1。让我们分解并理解它:

CONSTRAINT TABLE_PK

您正在创建一个名为 table_pk 的约束。

PRIMARY KEY

这个约束是一个主键

(C1)

上栏c1

USING INDEX TABLESPACE SFE_I1

一个主键,隐含地需要创建一个索引,以便它可以有效地搜索违反约束的重复项。与显式创建的索引(例如,您的第二条语句)一样,索引将在用户的默认表空间上创建,这并不总是最好的主意。 using index tablespace 语法允许您定义要使用的表空间,就像您在创建索引时使用它一样。

如果你尝试运行 两个语句,第二个应该失败,因为c1已经被第一个索引了。