例如,如果我有一个学生表:
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会自动为主键创建索引。
1条答案
按热度按时间o4hqfura1#
创建主键索引的过程是对
[student_id, subject_id]
的组合进行索引。向每个列添加外键约束并不会在它们上创建索引,如果需要(这可能是个好主意),则必须手动创建索引。