SQL Server 2005 이상 (둘 다 사용)에서 열에 UNIQUE
제약 조건을 추가하면 인덱스가 자동으로 만들어 지나요? 아니면 여전히 CREATE INDEX
이어야합니까?열을 고유하게 만들면 인덱스를 만들 수 있습니까?
답변
볼이 MSDN article :
데이터베이스 엔진이 자동으로 가 UNIQUE 제약의 고유성 요구 사항을 적용 할 수있는 UNIQUE 인덱스를 생성합니다. 당신이 인덱스를 생성 할 경우이 예제가 보여로
, 당신은 두 개의 인덱스를하게 될 겁니다 :
이 TestTable에 두 개의 고유 인덱스를 표시합니다create table TestTable (id int)
alter table TestTable add constraint unique_id unique (id)
create unique index ix_TestTable_id on TestTable (id)
select * from sys.indexes where [object_id] = object_id('TestTable')
; 테이블 자체를 나타내는 HEAP
당신이 고유 제한 조건 추가 할 때 색인이 생성됩니다
Reference을 - 두 번째 단락을 참조하십시오. UNIQUE 제약 조건은 기본적으로 에 테이블의 기존 열 또는 열을 추가
는 데이터베이스 엔진은 컬럼에있는 기존 데이터가 모든 값이 고유 확인하기 위해 검사합니다. 중복 값이 인 열에 UNIQUE 제약 조건 인 이 추가되면 데이터베이스 엔진은 오류를 반환하고 제약 조건을 추가하지 않습니다.
는데이터베이스 엔진은 자동으로 는 UNIQUE 제약의 고유성 요구 사항을 적용 할 수있는 UNIQUE 인덱스를 생성합니다. 따라서 중복 행을 삽입하려는 시도가 발생하면 데이터베이스 엔진이 고유 한 제약 조건을 위반했음을 나타내는 메시지를 반환하고 행을 테이블에 추가하지 않습니다. 클러스터 된 인덱스가 명시 적으로 으로 지정되어 있지 않으면 고유 한 클러스터되지 않은 인덱스가 기본적으로 UNIQUE 제약 조건을 적용하도록 만들어집니다.
예.
사실, 당신도 만들 수 CLUSTERED UNIQUE CONSTRAINT
: 테이블 col1
에 클러스터링 할 수 있도록합니다
ALTER TABLE mytable ADD CONSTRAINT UX_mytable_col1 UNIQUE CLUSTERED (col1)
.
거의 모든 데이터베이스가 UNIQUE CONSTRAINT
에 대한 색인을 생성합니다. 그렇지 않으면 유지 관리가 매우 어려울 수 있습니다.
Oracle
도 UNIQUE CONSTRAINT
과 UNIQUE INDEX
을 구별하지 않습니다. 하나의 명령은 다른 명령과 동의어입니다.
Oracle
의 유일한 차이는 UNIQUE CONSTRAINT
이 시스템에서 생성 이름으로 생성 될 수있는 동안 UNIQUE INDEX
는, 사용자가 제공 한 이름을 가져야한다는 것이다 :
ALTER TABLE mytable MODIFY col1 UNIQUE
이 SYS_CXXXXXX
이라는 인덱스를 생성한다.
- 1. 인덱스에 인덱스를 만들 수 있습니까?
- 2. 어떻게 다차원 배열을 고유하게 만들 수 있습니까?
- 3. SQL Server 2008에서 "Covering, Spatial"인덱스를 만들 수 있습니까?
- 4. Html/MVC에서 열을 어떻게 만들 수 있습니까?
- 5. SQLite에서 계산 열을 만들 수 있습니까?
- 6. 장고 : 인덱스를 만들 :
- 7. 우선 순위가 낮은 스레드/프로세스에서 Oracle 인덱스를 만들 수 있습니까?
- 8. HTTP 요청을 고유하게 식별 할 수 있습니까?
- 9. Lucene.net에서 인덱스를 정렬하고 싶습니다. C#에서이 인덱스를 내림차순으로 만들 수 있습니까?
- 10. 내가 배열에서 고유하게 알고있는 키에 대한 인덱스를 얻는 방법
- 11. MySQL에 너무 긴 varchar 열이 주어진 경우 : 문자열을 해시하고 해시 - 열을 고유하게 만들 것을 권장합니까?
- 12. null 또는 고유 일련을 허용하는 열을 어떻게 만들 수 있습니까?
- 13. Postgresql - 어떻게 정수 값을 가진 버전 열을 만들 수 있습니까?
- 14. FluentMigrator를 사용하여 nvarchar (MAX) 열을 만들 수 있습니까?
- 15. LINQ to SQL에서 DataContext.CreateDatabase를 사용하여 계산 열을 만들 수 있습니까?
- 16. 어떻게 Java에서 가변 열을 가진 데이터베이스에서 테이블을 만들 수 있습니까?
- 17. 적어도 헤더 텍스트만큼 DataTable 열을 만들 수 있습니까?
- 18. SharePoint의 일부 사용자에게만 열을 편집 가능하게 만들 수 있습니까?
- 19. 계산 된 열을 nullable로 만들 수 없습니까?
- 20. 사용자를 편집 가능하게 만들면 파이썬 뷰 템플릿을 '안전/보안'하게 만들 수 있습니까?
- 21. SQL Server에서 사용자 정의 함수를 사용하여보기에 인덱스를 만들 수 없습니다.
- 22. datatable에서 datagridview로 특정 열을 가져올 수 있습니까?
- 23. ASP.NET에서 다중 뷰 인덱스를 Javascript로 어떻게 업데이트 할 수 있습니까?
- 24. Qt : 얼마나 작게 만들 수 있습니까?
- 25. 어떻게 프로젝트에서 설치 프로그램을 만들 수 있습니까?
- 26. 이런 식으로 DB 인덱스를 사용할 수 있습니까?
- 27. 어떻게하면 UIActionSheet 인덱스를 저장할 수 있습니까?
- 28. o3d.Shape의 정점과 인덱스를 구할 수 있습니까?
- 29. 인덱스 생성은 기존 인덱스를 사용할 수 있습니까?
- 30. 메서드 호출시 브러쉬를 만들면
열을 고유하게 만들면 열이 이미 색인화되어 있으면 고유 색인이 작성되지 않습니다. 고유하지 않은 색인으로 고유 제한을 경고 할 수 있기 때문에 (보통 권장하지는 않지만) –
클러스터 된 제약 조건은 SQL Server에서도 작동합니다. 예 : – Andomar
@Andomar : 예, 클러스터 된 제약 조건을 설명하는 데 사용한 SQL Server입니다. 오라클은이 항목을 INDEX ORGANIZED TABLE이라고합니다. – Quassnoi