집 >데이터 베이스 >MySQL 튜토리얼 >Postgres 고유 제약 조건과 인덱스: 언제 어느 것을 사용해야 합니까?
고유 제약 조건과 인덱스는 모두 데이터베이스 테이블의 데이터 고유성을 보장하는 데 사용됩니다. 그러나 두 접근 방식에는 몇 가지 주요 차이점이 있습니다.
고유 제약 조건
CONSTRAINT
키워드를 사용하여 테이블 정의에 명시적으로 정의됩니다. 색인
CREATE INDEX
문을 사용하여 생성되었습니다. Postgres 문서에 따르면 ALTER TABLE ... ADD CONSTRAINT
을 사용하는 것이 테이블에 고유 제약 조건을 추가하는 데 선호되는 방법입니다. 이는 고유성을 적용하기 위해 특별히 고유 인덱스를 생성하는 것이 구현 세부 사항으로 간주되어 직접 액세스해서는 안 되기 때문입니다.
성능: 일반적으로 고유 제약 조건과 고유 인덱스는 쿼리 속도 측면에서 유사한 성능을 발휘합니다. 그러나 부분 인덱스는 데이터의 하위 집합에만 액세스하는 쿼리의 성능을 향상시킬 수 있습니다.
외래 키: 고유 제약 조건은 외래 키로 참조할 수 있지만 고유 인덱스는 참조할 수 없습니다.
제약 조건 오버헤드: 고유 제약 조건은 데이터를 삽입하거나 업데이트할 때 추가 유지 관리 작업이 필요하기 때문에 고유 인덱스에 비해 약간의 오버헤드가 있습니다.
고유 제약 조건과 인덱스의 차이점을 설명하기 위해 고유 제약 조건과 고유 인덱스가 모두 포함된 테이블을 만들어 보겠습니다.
<code class="language-sql">CREATE TABLE foo ( id SERIAL PRIMARY KEY, code INTEGER, label TEXT, CONSTRAINT foo_uq UNIQUE (code, label) ); CREATE UNIQUE INDEX foo_idx ON foo (code, label);</code>
고유 제약조건(foo_uq)과 고유 인덱스(foo_idx)는 모두 (코드, 라벨) 조합의 고유성을 강화합니다. 그러나 Postgres에서 권장되는 접근 방식이므로 고유 제약 조건을 사용하는 것이 좋습니다.
부분 색인
부분 인덱스를 생성하려면 CREATE INDEX
문 내에 WHERE
절을 사용하세요.
<code class="language-sql">CREATE UNIQUE INDEX foo_partial_idx ON foo (code) WHERE label IS NOT NULL;</code>
이 색인은 label
이 NULL
가 아닌 행에만 적용됩니다.
색인을 사용하여 제약 조건 추가
부분 인덱스를 사용하여 고유 제약 조건을 추가할 수 없습니다. 그러나 기존 고유 인덱스를 사용하여 고유 제약 조건을 생성할 수 있습니다.
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_partial_uq UNIQUE USING INDEX foo_partial_idx;</code>
위 내용은 Postgres 고유 제약 조건과 인덱스: 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!