database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1315 게시물 읽기
No. 1315
mssql 인덱스 질문
작성자
왕초보
작성일
2004-05-09 21:25
조회수
3,843

테이블을 만들고 인덱스를 걸때 거는 순서와 다르게 사용하면 무의미하다고 하던데요..

그러니까..

create table TT (
A int,

B int,

C int

)

해서 테이블 만들고 유니크하게 인덱스를 A+B 로 걸면

select 에서 A+B 로 검색할때는 인덱스를 사용하는데

B+A 로 검색하거나 B만 검색하거나 A만 검색하면 인덱스를 사용하지 않는다고 하더군요.

1. MYSQL 에서는 되는 것으로 아는데 MSSQL 에서는 않되는 것인지요?

2. 그리고 alter table TT add CONSTRAINT IX unique ( A, B )

create unique index IX on TT(A,B) 는 어떤 차이가 있는지 부탁드립니다.

이 글에 대한 댓글이 총 2건 있습니다.

일단 인덱스에 사용에 대한 건..

A + B로 인덱스가 잡혀있다면..

조건이 = 로만 들어온다고 가정할때..

WHERE A = 1 AND B = 1 이나

WHERE B = 1 AND A = 1 나 차이가 없는 문장이죠..

두 문장 다 당근 인덱스를 사용하겠죠.

 

인덱스에 데이터는

A B

----

1 1

1 2

1 3

2 1

2 2

----

이런 식으로 구성되어 있겠죠.

만약 WHERE A = 1 만 들어올때도 인덱스를 사용합니다.

A가 1인 자료만 순차적으로 찾을 수 있기 때문이죠..

그런데 만약 WHERE B = 1만으로 조건을 준다면..

인덱스를 사용해선 안되겠죠..

어차피 전부 뒤져보아야 B = 1인 자료를 찾을 수 있기 때문이죠..

여기까지는 일반적인 상식이고..

 

특이하게 나타나는 케이스는

A+B가 클러스터드 인덱스라면 인덱스를 사용하는 것처럼

나타날 수 있습니다. 그 자체가 테이블이기 때문이죠..

 

또 한가지는 A+B가 클러스터드 인덱스가 아니더라도..

만약 문장이

SELECT A, B

FROM TT

WHERE B = 1

이런 식이라면 인덱스를 사용할 수 있습니다.

인덱스 자체가 SELECT절의 모든 컬럼과 WHERE절의 모든 조건을

커버할 수 있기 때문에 굳이 테이블을 찾지 않고 인덱스만 찾는 거죠.

이것을 커버드 인덱스(커버링)라고 합니다.

 

1.alter table TT add CONSTRAINT IX unique ( A, B )

이것은 TT 테이블에 A,B컬럼으로 유니크 제약조건을 준다는

의미입니다. 저도 책에서 방금 찾아 봤습니다만.. ^^

PRIMARY KEY 제약조건과의 차이의 NULL값의 허용여부라고 하네요.

PRIMARY KEY : NULL값 허용안함

UNIQUE CONSTRAINT : NULL값 허용, 단 한번만 넣을 수 있음.

 

2.create unique index IX on TT(A,B)

이것은 TT 테이블에 A,B컬럼으로 유니크한 인덱스를 만든다는 의미입

니다. 물론 유니크 제약이 자동으로 걸리겠죠.

 

정리하면 위의 것은 유니크 제약조건만 주는 것이고..

아래 것은 유니크한 인덱스를 만든다는 것입니다.

 

SQL님이 2004-05-10 00:59에 작성한 댓글입니다. Edit

sql님 명쾌한 답변 감사드립니다.

행복하세요 ^^

왕초보님이 2004-05-10 09:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1318리눅스에서 MSSQL에 연결하는 ODBC가 있나요? [1]
이석봉
2004-05-10
3119
1317SQL 2000을 쓰는데
유부열
2004-05-10
2564
1316이것 좀 봐주세요
고초보
2004-05-10
2423
1315mssql 인덱스 질문 [2]
왕초보
2004-05-09
3843
1314원도우2003 STANDARD 서버에 MS-SQL 2000 설치가 안되네요. [4]
김남일
2004-05-07
3278
1313ms-sql에서 isnull이 안먹히나요? [3]
오정민
2004-05-06
3808
1312프로시져에서 테이블을 OUTPUT 할수 있나요? [2]
초보 SQL
2004-05-06
3440
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다