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

标签 sql oracle indexing ddl

我正在使用以下脚本创建一个表(我使用了“使用索引”)。

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

如果我同时运行这个查询,会发生什么。建议的方法是什么?

如果我的创建表脚本包含复合主键并且我正在使用 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 已由第一个语句建立索引。

关于sql - 在oracle中使用索引与创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34940905/

相关文章:

MySQL在一个表中创建两列数据的索引总和

mysql - 用于选择字段名称的 while 循环?

sql - 将多列值合并到一行的一列中 Oracle SQL

sql - Firebird 数据库是否支持 Schema?如果是这样,如何通过 ISQL 在 Firebird DB 中创建模式?

sql - Oracle 中的匿名 TABLE 或 VARRAY 类型

java - 在 CentOS 上安装 Java 1.6 Update 141

python - pandas:如何重新索引多索引级别?

sql查询需要包含银行假期

sql - 更新多个表的查询

sql - 转换为日期时未使用 PostgreSQL 时间戳索引