2016-08-23 5 views
0

그래서 내가보고있는 테이블에는 고유 한 제약 조건과 여러 개의 열에 대한 고유 인덱스가 있으며 둘 모두에 대해 똑같은 열이 있습니다.고유 인덱스 및 고유 제한 조건 (다중 열)이 필요한 이유는 무엇입니까?

이 용도로 사용 중이거나 고유 한 제한 사항이 중복 되었습니까?

+2

고유 제한 조건은 인덱스로 백업해야합니다. 하지만 그 자체가 유일한 것은 아닙니다. 둘 다 가지고있는 것이 정상입니다. 그들은 대개 같은 이름을 지니지 만, 항상 그런 것은 아닙니다. 물론 명시 적 고유 제한없이 고유 인덱스를 가질 수 있습니다. 그러나 제약 조건은 성능뿐만 아니라 무결성을 보장한다는 것을 Oracle 및 개발자에게 분명히합니다. 왜이게 문제라고 생각하니? –

+1

알렉스와 동의하지만, 거기에 무언가가 중복 된 것으로 간주 될 경우 색인의 고유성을 선택하겠다고 덧붙일 것입니다. 차라리 제약 조건과 고유 인덱스가 아닌 고유 한 제약 조건과 고유하지 않은 인덱스를 갖고 싶습니다. –

+0

MSDN 기사에 따르면 https://technet.microsoft.com/en-us/library/aa224827(v=sql.80).aspx 고유 제약 조건과 고유 인덱스 사이에는 실제적인 차이가 없습니다. 또한 제약 조건은 데이터베이스의 제약 조건 개체로 나열됩니다. 고유 제한 조건을 사용 불가능하게 할 수 없으므로, 제한 조건 상태를 가지면 고유 제한 조건을 초과하는 추가 동작이 고유 제한 조건에 부여되지 않습니다. 그러나 고유 제한 조건을 작성하는 ALTER TABLE 명령에는 사용할 수없는 여러 색인 작성 옵션이 있습니다. 문서 – Gopidoss

답변

1

고유 한 인덱스 개의 고유 인덱스가 처음에는 중복되는 것으로 동의합니다. 혼란스러운 차이점을 허용하면서 자신을 반복하지 마십시오. 그러나 관리 기능과 기존 복제본을 허용하는 두 가지 이유가 있습니다.

관리 이론에서

특징, 논리적 제약은 구현에 대한 걱정없이 만들 수 있습니다. 제약 조건은 커밋 될 때까지 제약 조건을 연기하는 것과 같은 몇 가지 옵션과 함께 참이어야하는 것을 지정합니다.

실제로 제약 조건은 구현이 고려되어야하는 큰 성능 및 저장 패널티가 있습니다. 인덱스가 필요합니다. 그렇지 않으면 단일 삽입은 O (log (n)) 대신 O (n) 시간이 필요합니다. 이러한 인덱스는 엄청난 양의 공간을 차지합니다. 누군가가 저장 위치, 압축 방법 등을 지정할 수 있습니다.

대부분의 경우 이러한 기능은 중요하지 않으며 모든 색인 기본값을 사용하는 것이 좋습니다. 그러나 때로는 저장 및 성능이 중요하며 사람들은 제약 조건을 신경 쓰지 않고 인덱스를 조정하려고합니다.

고유 제한 조건이 고유 인덱스가없는 적어도 하나의 경우가 있습니다

중복 기존 허용합니다. 기존 중복 가치를 허용 할 수 있지만 제약 조건을 NOVALIDATE으로 설정하고 고유하지 않은 색인을 사용하여 향후 중복을 방지 할 수 있습니다.

--Create table and insert duplicate values. 
create table test1(a number); 

insert into test1 values(1); 
insert into test1 values(1); 
commit; 

--Add a non-validated unique constraint, with a non-unique index. 
alter table test1 
add constraint test1_uq unique(a) 
using index (create /* Not unique!*/ index test1_uq on test1(a)) novalidate; 

--Now multiple inserts raise: ORA-00001: unique constraint (JHELLER.TEST1_UQ) violated 
insert into test1 values(2); 
insert into test1 values(2); 

물리적 색인은 중복을 허용해야하지만 논리적 제한은 더 이상 중복을 허용하지 않습니다. 이것은 드문 기능이지만 프로덕션 코드에서 본 적이 있는지 확실하지 않습니다.

+1

고유 제한 조건을 연기 가능한 것으로 추가하면 고유하지 않은 색인도 자동으로 생성됩니다. –