답변:
네,하지만 오직 이노 DB. Innodb는 현재 외래 키가 구현 된 유일한 배송 테이블 형식입니다.
robert이 게시 한 링크에 지정된대로 인덱스가 자동으로 생성됩니다 .
InnoDB는 외래 키 검사가 빠르며 테이블 스캔이 필요하지 않도록 외래 키 및 참조 키에 대한 인덱스가 필요합니다. 참조 테이블에는 외래 키 열이 동일한 순서로 첫 번째 열로 나열되는 인덱스가 있어야합니다. 이러한 인덱스는 참조 테이블에 존재하지 않으면 자동으로 작성됩니다. (이는 인덱스를 명시 적으로 작성했거나 외래 키 제약 조건을 작성하지 못한 일부 이전 버전과 대조적입니다.) 제공된 경우 index_name이 앞에서 설명한대로 사용됩니다.
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
예, InnoDB 및 FOREIGN KEY 제약 조건을 참조하십시오 .
적어도 문서 에 따라 ALTER TABLE (CREATE TABLE 대신)을 수행 하면 링크가 5.1이지만 링크는 5.1이지만 인덱스는 자동으로 인덱스를 얻지 못합니다 .
[...] ALTER TABLE을 사용하여 테이블에 외래 키 제약 조건을 추가 할 때는 필요한 인덱스를 먼저 만들어야합니다.
명시된 바와 같이 InnoDB에 적용됩니다. 처음에는 다른 많은 (특히 MS SQL 및 DB2)이 그렇지 않은 것이 이상하다고 생각했습니다. 테이블 스페이스 스캔은 테이블 행이 매우 적을 때 인덱스 스캔보다 낫습니다. 따라서 대부분의 경우 외래 키를 인덱싱하려고합니다. 그런 다음 필자가 일종의 히트를 쳤다-이것이 반드시 독립형 (한 열) 인덱스 여야한다는 것을 의미하지는 않습니다 .MySQL의 자동 FK 인덱스에 있습니다. 따라서 이것이 MS SQL, DB2 (Oracle I 'm 모르겠 음) 등이 DBA에 맡겨진 이유 일 수 있습니다. 큰 테이블의 여러 인덱스가 모두 성능 및 공간에 문제를 일으킬 수 있습니다.
예, Innodb
이것을 제공하십시오. FOREIGN KEY
절 뒤에 외래 키 이름을 넣거나 MySQL에서 이름을 만들 수 있도록 남겨 둘 수 있습니다. MySQL은 자동으로 foreign_key_name
이름을 가진 인덱스를 만듭니다 .
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action