【发布时间】: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 仅在绝对需要时自动创建索引(即支持唯一约束)。否则,除非您明确告诉它,否则它永远不会为您创建索引。
-
另外,它与是复合键还是简单键无关。