2011-04-08 6 views
2

기본 키가없는 새 테이블을 만들었습니다. 그러나 테이블에는 고유하고 인덱싱 된 하나의 필드가 있습니다.기본 키를 사용하지 않고 색인 생성 된 고유 한 열을 사용해야합니까?

이 열은 고유 한 값을 가지고 있으며 기본으로 지정할 수 있습니다. 그러나 SQL 성능에는 어떤 영향이 미치고 기본이 아닌 다른 요인은 영향을 받습니까?

감사합니다.

+2

인용구 : Joe Celko의 인용문 : * 기본 키가없는 경우 테이블이 아닙니다. * –

+2

Marc - 확실하지 않지만 Celko를 잘못 인용하거나 잘못 해석 한 것일 수 있습니다. 그가 말한 것은 * 키가없는 표는 관계형으로 표가 아니라는 것입니다. Joe, Chris Date (그리고 나 자신!)가 동의하는 것 중 하나는 물론 정의에 의한 관계형 테이블에는 최소한 하나의 키가 있어야하지만 하나의 키를 "기본"키로 지정한다는 아이디어는 본질적으로 불필요합니다. 크리스 데이트 (Chris Date)의 말에서 기본 키는 "순전히 심리적"이어서 필수적이지는 않지만 유용 할 수도 있습니다. – sqlvogel

답변

6

열에 NULL 값이 포함될 수있는 경우 기본 키가 될 수 없습니다. 이 경우 유일한 색인은 수행 할 수있는 최선의 방법입니다 (이 경우 NULL 값을 가진 여러 행이 표시되지 않습니다).

값이 NULL 인 경우 절대로 열에 NOT NULL 제약 조건을 추가하거나 기본 키로 지정해야합니다. 어느 쪽이든, 이는 옵티 마이저에 열이 NULL 값을 가지지 않을 것임을 알려주지 만 그렇지 않으면 불가능할 수있는 몇 가지 종류의 쿼리 최적화를 고려할 수 있습니다.

(a) 기본 키 제약 조건과 (b) 고유 인덱스와 NOT NULL 제약 조건 사이에 중요한 성능 차이가있을 것으로 기대하지 않습니다. 두 방법 모두 최적화 프로그램에 테이블 내용에 대한 동일한 정보를 제공합니다. 둘 중 하나를 외래 키의 대상으로 사용할 수도 있습니다. 그러나 기본 키가 있어야하는 몇 가지 특정 기능이 있습니다. 예를 들어, 인덱스 구성 테이블에는 하나의 키가 있어야합니다.

+0

응답을 보내 주셔서 감사합니다. 색인 구성 표 : http://www.orafaq.com/wiki/Index-organized_table –

2

기본 키는 자동으로 고유하고 색인이 생성됩니다. pkey를 피함으로써 기본적으로 휠을 다시 만들고 성능을 저하시킬 수 있습니다. 기본 키가되어야합니다.

SQL 테이블 디자인 및 성능에 대한 기본 원칙 : 쉽게 사용할 수있는 것을 사용하고 그러한 강력한 RDBMS를 만드는 데 소요 된 수천만, 수백만 시간의 엔지니어링 시간을 사용하지 마십시오. 대다수의 경우 기본 키와 외래 키가 올바르게 사용되고 쿼리 최적화 프로그램이 최적의 실행 시나리오를 선택합니다.

+3

+1 오라클에는 "클러스터 된 인덱스"개념이 없습니다. –

+0

@ 토니. 일종의. 인덱스 구성 테이블 (IOT)은 SQL Server의 클러스터 된 인덱스에 가깝습니다. 단, 오라클의 IOT는 항상 기본 인덱스에 "클러스터 된 인덱스"가 있습니다. SQL Server에서는 클러스터 된 인덱스를 일반 인덱스와 같은 모든 열에 정의 할 수 있습니다. –

+0

@ 토니 : 오라클이 자연스러운 기능이라고 생각했습니다.분명히 방법이 있지만 기본적으로 SQL Server pkeys에서는 그렇지 않습니다. 여기에 링크가 있습니다 : http://www.dba-oracle.com/data_warehouse/clustered_index.htm –

4

UNIQUE 제약 조건이있는 열이 될 수 있지만 기본 키는 절대 NULL이 될 수 없습니다.

2

"기본"후보 키와 다른 후보 키 사이에는 원칙적으로나 실제적으로 차이가 없습니다. 중요한 점은 테이블에 데이터의 무결성을 보장하는 데 필요한만큼의 키 (하나 이상의 키)를 적용하는 데 제약이 있어야한다는 것입니다. 기본 키는 개발자가 선택한 것처럼 유용하거나 필요한 것일뿐입니다. 개발자 나 다른 사용자가 특정 목적이나 다른 용도로 특정 키를 선택하는 것이 매우 편리 할지라도 기본 키는 유용하거나 필요합니다.