2016-01-22 76 views
1

我使用以下脚本创建了一个表(我使用了使用索引)。在oracle中使用索引与创建索引

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列创建索引。但是这两个脚本之间有什么区别。

以及如果我运行这个查询,应该发生什么。有什么建议的方式来做到这一点?

如果我创建表的脚本包含复合主键,我使用使用索引会那么如何创建索引关键字(将它打造为所有的复合列单指数)

回答

1

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已被第一个索引。

+0

如果在上述帖子的第一个查询中没有使用USING INDEX,它会默认创建索引吗?如果是,我们如何看到索引? 如果复合主要使用索引创建,那么它会创建考虑所有涉及的复合列的索引。 – Yoga

+0

如果我想为不是主键的列创建索引,那么应该满足哪些条件(例如,如果列能够生成重复值) – Yoga

+0

@Yoga主键将始终创建索引,它与主键具有相同的名称。如果您省略'using index tablespace'子句,它将在默认表空间上创建。如果你有一个复合键,它将创建一个复合索引。您可以在具有重复值的列上创建索引。如果你试图创建一个“唯一索引”,它会失败。 – Mureinik