MySQL에서 키, 기본 키, 고유 키 및 인덱스의 차이점


250

내가 사용해야하는 경우 KEY, PRIMARY KEY, UNIQUE KEYINDEX?


2
PRIMARY 키는 행을 식별하는 데 사용되며 동일한 동일한 데이터로 두 개의 행을 삽입하지 못하게합니다. INDEX 키는 검색 속도를 높이기위한 것입니다 (최소 삽입 속도가 느림). 열의 고유 한 데이터에 대한 고유 키.
Hos Mercury


답변:


303

KEY그리고 INDEXMySQL의 동의어입니다. 그들은 같은 것을 의미합니다. 데이터베이스에서는 인덱스 를 사용 하여 데이터 검색 속도를 향상시킵니다. 인덱스는 일반적으로 사용되는 열을 생성 JOIN, WHEREORDER BY조항.

테이블 users이 있고 성명이 'Smith'인 모든 사용자를 검색하려고 한다고 가정하십시오 . 인덱스가 없으면 데이터베이스는 테이블의 모든 레코드를 거쳐야합니다. 데이터베이스에 레코드가 많을수록 결과를 찾기 위해 더 많은 작업을 수행해야하기 때문에 속도가 느립니다. 반면에 인덱스는 데이터베이스가 'Smith'레코드가있는 관련 페이지로 빠르게 건너 뛸 수 있도록 도와줍니다. 이것은 우리 인간이 전화 번호부 디렉토리를 통해 성으로 사람을 찾는 방법과 매우 유사합니다. 정보를 가능한 순서대로 삽입 한 경우에는 표지에서 디렉토리를 검색하지 않습니다. 'S'페이지로 빠르게 건너 뛸 때 사용하십시오.

기본 키와 고유 키는 비슷합니다. 기본 키는 행을 고유하게 식별 할 수있는 열 또는 열의 조합입니다. 고유 키 의 특수한 경우입니다 . 테이블에는 최대 하나의 기본 키가 있지만 둘 이상의 고유 키가있을 수 있습니다. 열에 고유 키를 지정하면 테이블의 두 개의 개별 행이 동일한 값을 가질 수 없습니다.

또한 기본 키 또는 고유 키로 정의 된 열은 MySQL에서 자동으로 인덱싱됩니다.


2
동일한 값을 가진 고유 키와 기본 키를 모두 가질 수 있습니까?
HELP

58
@needHELP : 당신이라는 테이블이있는 경우 passengers다음 필드를 : (id, first_name, last_name, age, passport_number)당신이 일반적으로 설정했던 id기본 키로 열을. 기본 키는 자동으로 고유 키입니다. 주요 차이점은 테이블에 기본 키를 하나만 가질 수 있으며 열에 NULL값을 포함 할 수 없다는 것 입니다. 셋업 할 필요가 없습니다 id수 열을 UNIQUE기본 키를 설정하여, 그것은 자동으로 고유합니다 있기 때문에 ... 그럼 당신도 설정할 수 passport_numberUNIQUE그래서 더 이상보다 승객 ...
다니엘 Vassallo

32
... 동일한 여권 번호를 가질 수 있습니다. 그러나 여권 번호가없는 승객 (예 : 어린이)이있을 수 있습니다. 이 경우 NULL문제없이 해당 열에 삽입 할 수 있습니다.
Daniel Vassallo

2
@DanielVassallo 나는 MySQL이 사용하는 동의어 사이에서 그것을 지우는 방식이 마음에 든다.
SIFE

1
가장 좋은 설명 중 하나입니다. 고마워 :-)
라비 히 라니

61

KEY와 INDEX는 동의어입니다.

성능 측정 및 EXPLAIN에 색인 누락으로 인해 쿼리가 비효율적임을 표시 할 때 색인을 추가해야합니다. 인덱스를 추가하면 쿼리 성능이 향상 될 수 있지만 테이블 수정 속도가 느려질 수 있습니다.

중복 열을 삽입하려고하면 오류가 발생하도록 해당 열의 값을 고유하게 제한하려면 UNIQUE를 사용해야합니다.

PRIMARY KEY는 고유 제한 조건이며 열이 NOT NULL임을 나타냅니다. 각 행에 ID를 부여하는 데 사용됩니다. 외래 키 제약 조건을 통해 다른 테이블과 조인하는 데 유용 할 수 있습니다. 테이블에 PRIMARY KEY가있는 것은 아니지만 일반적으로 좋은 생각입니다.


PRIMARY KEY는 각 행에 ID를 부여하는 데 사용됩니까? 내 무지에 대해 죄송합니다.
HELP

@needHELP : 테이블의 행을 고유하게 식별하는 방법으로 사용됩니다. 예를 들어 테이블에서 특정 행을 삭제하려는 경우 실수로 잘못된 행을 삭제하지 않도록 명확하게 식별 할 수있는 방법이 유용합니다. 인덱싱 된 다른 테이블과 조인하는 데에도 유용합니다.
Mark Byers

48

기본 키NULL값을 허용하지 않지만 고유 키NULL값을 허용 합니다.

테이블에서 하나의 기본 키만 선언 할 수 있지만 테이블에는 여러 개의 고유 키 (열 할당) 가있을 수 있습니다 .


17

PRIMARY KEYAND UNIQUE KEY는 다른 기능을 가지고 있다는 점을 제외하면 비슷합니다. 기본 키는 테이블 행을 고유하게 만듭니다 (즉, 동일한 키를 가진 2 개의 행을 가질 수 없음). 데이터베이스 테이블에는 1 개의 기본 키만있을 수 있습니다.

고유 키는 테이블 행의 테이블 열을 고유하게 만듭니다 (즉, 2 개의 테이블 행이 동일한 정확한 값을 가질 수 없음). 테이블에서 하나의 테이블 열만 고유함을 나타내는 기본 키와 달리 고유 키 테이블 열을 두 개 이상 가질 수 있습니다.

INDEX또한 독창성을 만듭니다. MySQL (예)은 인덱싱 된 열에 대한 인덱싱 테이블을 만듭니다. 이렇게하면 인덱스 된 테이블 열에서 쿼리를 쿼리 할 때 테이블 행 값을 더 쉽게 검색 할 수 있습니다. 단점은 많은 업데이트 / 삭제 / 생성을 수행하는 경우 MySQL이 인덱싱 테이블을 관리해야하며 성능 병목 현상이 발생할 수 있다는 것입니다.

도움이 되었기를 바랍니다.


또한 일 UNIQUE KEY수는 NULL있지만 일 PRIMARY KEY수는 없습니다 NULL.
Rafay

10

고유 키 : 두 행이 유사한 열

기본 키 : 테이블의 모든 행을 고유하게 식별 할 수있는 최소 열 수의 모음입니다 (즉, 기본 키를 구성하는 모든 열에서 두 행이 유사하지는 않습니다). 테이블에 둘 이상의 기본 키가있을 수 있습니다. 고유 키가 있으면 테이블에 기본 키 ( "기본"키가 아님)가 있습니다. 고유 키가 없으면 일부 테이블에서 (first_name, last_name, father_name, mother_name)과 같은 행을 식별하기 위해 둘 이상의 열 값이 필요합니다.

인덱스 : 쿼리를 최적화하는 데 사용됩니다. 일부 열을 기준으로 결과를 여러 번 검색하거나 정렬하려는 경우 (예 : 대부분 사람들이 롤 번호가 아닌 이름으로 학생을 검색 할 경우) 열 값이 모두 " 이진 트리 알고리즘을 사용하여 색인을 생성했습니다.


테이블에 하나의 PK 만있을 수 있다고 생각합니다.
Răzvan Flavius ​​Panda

7

기본 키 -테이블에 하나의 기본 키만 테이블에 넣을 수 있으며 테이블에 값을 입력 할 때 해당 열을 비워 둘 수 없습니다.

고유 키 -테이블에 둘 이상의 고유 키를 넣을 수 있으며 테이블에 값을 입력 할 때 해당 열을 비워 둘 수 있습니다. 기본 키와 고유 키를 적용 할 때 열의 고유 값 (동일하지 않음)을 사용합니다.


테이블에는 PRIMARY KEY가 하나만 있지만 고유 키는 둘 이상입니다.
VIKASH

6

기본 키는 다른 테이블 작업에 사용됩니다. 이것이 관계형 데이터베이스의 기초입니다. 책 데이터베이스가있는 경우 2 개의 테이블-1) 책 및 2) INT 기본 키 "id"를 가진 저자를 만드는 것이 좋습니다. 그런 다음 저자 이름 대신 책에서 id를 사용합니다.

반복되는 항목을 원하지 않으면 고유 키가 사용됩니다. 예를 들어, 책 테이블에 제목이 있고 각 제목에 대해 하나의 항목 만 있는지 확인하려고 할 수 있습니다.


2

고유 키 :

  1. 둘 이상의 값이 널이 될 수 있습니다.
  2. 두 개의 튜플은 고유 키에서 동일한 값을 가질 수 없습니다.
  3. 하나 이상의 고유 키를 결합하여 기본 키를 구성 할 수 있지만 그 반대의 경우는 아닙니다.

기본 키

  1. 하나 이상의 고유 키를 포함 할 수 있습니다.
  2. 튜플을 고유하게 나타냅니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.