항상 기본 키를 사용 (업그레이드 된 의견은 대답). 이 경우 기본 키는 (cars_id,car_parts)
입니다. 두 세계의 장점 : 기본 키 및 추가 열이 없습니다. 그러나 많은 사람들이 자동 증가 정수 기본 키가있는 추가 열을 만드는 이유는 한 필드가 아닌 두 필드를 기반으로 행을 조작하는 인터페이스를 작성하는 게으른 이유이기 때문입니다. PRIMARY KEY
을 필요로
이 InnoDB
테이블에 특히 사실이다 : 한 정의하지 않는 경우, 엔진은 create a hidden one for you 것입니다 : 당신이 당신의 테이블에 대한 기본 키를 정의하지 않으면
, MySQL은 첫 번째에 위치 모든 키 열이 NOT NULL이며, InnoDB가 클러스터 된 인덱스로 사용하는 UNIQUE 인덱스.
테이블에 PRIMARY KEY 또는 적절한 UNIQUE 인덱스가없는 경우 InnoDB는 내부적으로 행 ID 값이 포함 된 합성 열에 숨겨진 클러스터 된 인덱스를 생성합니다. 행은 InnoDB가 그러한 테이블의 행에 할당 한 ID로 정렬됩니다. 행 ID는 새로운 행이 삽입 될 때 단조롭게 증가하는 6 바이트 필드입니다. 따라서 행 ID로 정렬 된 행은 물리적으로 삽입 순서입니다.
뿐만 아니라 역순 인덱스를 생성하여, 또한 빨리 (지금은 car_id
에 검색에 잘 응답) car_parts
검색 할 수있는 테이블의 그 종류에 두 번째 인덱스를 정의하는 것은 드문 일이 아니다 : INDEX(car_parts,car_id)
. 그것은 INSERT
'의 작은 성능 충돌을 의미하지만, 만약 당신이 SELECT
이상의 데이터를 조작한다면 (보통은 그렇습니다), 이것은 더 빠른 SELECT
에 의해 정당화됩니다.
항상 기본 키를 사용하십시오. 이 경우 기본 키는'(cars_id, car_parts)'입니다. 두 세계의 장점 : 기본 키 및 추가 열이 없습니다. 그러나 많은 사람들이 자동 증가 정수 기본 키가있는 _extra_ 열을 만드는 이유는 _interface_를 작성하는 것이 게으르므로 _2_ 필드를 기반으로 행을 조작하는 것이기 때문입니다. – Wrikken
"기본 키"가 "자동 시작 정수 열"과 같은 것으로 가정하는 것 같습니다. 그렇지 않습니다. Wrikken이 맞습니다 : 당신의 경우'(cars_id, car_parts)'*는 완벽한 기본 키입니다. –
죄송합니다. 자동 증가 ID가 – Jason