作为组合键一部分的外键是否在Oracle中自动编制索引?

ehxuflar  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(159)

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

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会自动为主键创建索引。

o4hqfura

o4hqfura1#

创建主键索引的过程是对[student_id, subject_id]的组合进行索引。向每个列添加外键约束并不会在它们上创建索引,如果需要(这可能是个好主意),则必须手动创建索引。

相关问题