Programing

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

lottogame 2020. 4. 12. 10:13
반응형

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

인덱스 키를 자동으로 사용할 수 없습니다

ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)

예를 들어 사진과 같은 FOREIGN KEY와 같이 생성 한 테이블의 이름입니다 photograph_id. 코드는 다음과 같아야합니다

ALTER TABLE photographs ADD INDEX (photograph_id);

참고 : https://stackoverflow.com/questions/304317/does-mysql-index-foreign-key-columns-automatically

반응형