【问题标题】:Are foreign keys that are part of a composite key automatically indexed in Oracle?作为复合键一部分的外键是否会在 Oracle 中自动建立索引?
【发布时间】:2015-11-09 09:42:40
【问题描述】:

例如,如果我有一个学生表:

CREATE TABLE student (
    student_id NUMBER(8),
    student_name VARCHAR2(30),
    CONSTRAINT pk_student PRIMARY KEY (student_id)
);

还有一个主题表:

CREATE TABLE subject (
    subject_id NUMBER(8),
    subject_name VARCHAR2(30),
    CONSTRAINT pk_subject PRIMARY KEY (subject_id)
);

然后我创建了第三张学生最喜欢的科目表:

CREATE TABLE fav_sub (
    student_id NUMBER(8),
    subject_it NUMBER(8),
    CONSTRAINT pk_fav_sub PRIMARY KEY (student_id, subject_id),
    CONSTRAINT fk_1_fav_sub FOREIGN KEY (student_id) REFERENCES student(student_id),
    CONSTRAINT fk_2_fav_sub FOREIGN KEY (subject_id) REFERENCES subject(subject_id)
);

然后我是否需要手动为fav_sub 表中的外键创建索引,例如:

CREATE INDEX in_1_fav_sub ON fav_sub(student_id);
CREATE INDEX in_2_fav_sub ON fav_sub(subject_id);

或者外键的索引是由数据库自动创建的,因为它们是复合键的一部分?

编辑:澄清一下,我不是在问是否自动创建外键索引,我是在问当它是复合键的一部分时是否创建外键索引,因为 Oracle 自动索引主键。

【问题讨论】:

  • Oracle 仅在绝对需要时自动创建索引(即支持唯一约束)。否则,除非您明确告诉它,否则它永远不会为您创建索引。
  • 另外,它与是复合键还是简单键无关。

标签: database oracle indexing


【解决方案1】:

主键索引的创建是[student_id, subject_id]的组合。为每个单独的列添加外键约束不会在它们上创建索引,如果你想要它(这可能是一个好主意),你必须手动创建它。

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2012-09-22
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多