[mysql] MySQL은 외래 키 열을 자동으로 색인합니까?

MySQL은 외래 키 열을 자동으로 색인합니까?



답변

네,하지만 오직 . Innodb는 현재 외래 키가 구현 된 유일한 배송 테이블 형식입니다.


답변

robert이 게시 한 링크에 지정된대로 인덱스가 자동으로 생성됩니다 .

InnoDB는 외래 키 검사가 빠르며 테이블 스캔이 필요하지 않도록 외래 키 및 참조 키에 대한 인덱스가 필요합니다. 참조 테이블에는 외래 키 열이 동일한 순서로 첫 번째 열로 나열되는 인덱스가 있어야합니다. 이러한 인덱스는 참조 테이블에 존재하지 않으면 자동으로 작성됩니다. (이는 인덱스를 명시 적으로 작성했거나 외래 키 제약 조건을 작성하지 못한 일부 이전 버전과 대조적입니다.) 제공된 경우 index_name이 앞에서 설명한대로 사용됩니다.

InnoDB 및 FOREIGN KEY 제약


답변

예, InnoDB 및 FOREIGN KEY 제약 조건을 참조하십시오 .


답변

적어도 문서 에 따라 ALTER TABLE (CREATE TABLE 대신)을 수행 하면 링크가 5.1이지만 링크는 5.1이지만 인덱스는 자동으로 인덱스를 얻지 못합니다 .

[…] ALTER TABLE을 사용하여 테이블에 외래 키 제약 조건을 추가 할 때는 필요한 인덱스를 먼저 만들어야합니다.


답변

5.7 문서 에서 인용문을 찾는 사람들을 위해 :

MySQL은 외래 키 및 참조 키에 대한 인덱스를 요구하므로 외래 키 검사가 빠르며 테이블 스캔이 필요하지 않습니다. 참조 테이블에는 외래 키 열이 동일한 순서로 첫 번째 열로 나열되는 인덱스가 있어야합니다. 이러한 인덱스는 참조 테이블에 존재하지 않으면 자동으로 작성됩니다. 외래 키 제약 조건을 적용하는 데 사용할 수있는 다른 인덱스를 만들면이 인덱스가 나중에 자동으로 삭제 될 수 있습니다. 주어진 경우 index_name이 앞에서 설명한대로 사용됩니다.


답변

명시된 바와 같이 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