본문 바로가기

Database

DB 인덱스

반응형

koy.tistory.com 출처


인덱스

< 인덱스 >
1. 인덱스 종류
    클러스터형(clustered index)
    - 순차적으로 지정, 테이블당 1개만 생성, Primary key와unique 에만 생성가능
    비클러스터형(non-clustered index)
   - 테이블당 여러개 생성

2. 제약조건에 따른 인덱스
    Primary key설정시 자동으로 클러스터형 인덱스가 설정된다.
    uniqeu설정시 자동으로 비클러스터형 인덱스가 설정된다.
    인덱스는 Primary key 에 종속적이다. 
    테이블생성시 pk를 설정하지 않으면 인덱스가 설정되지 않는다.
    pk를 삭제하면 인덱스도 함께 삭제된다.(무슨관계?)
    
3. 인덱스의 내부동작
    1) B-tree(balanced tree) : 데이트를 분활하여 리프노드에 저장한다.
                                         노드를 더 추가하여 데이터의 접근성을 높인다. 
         
   
데이터 추가시 클러스터형에서는 순차적으로 추가가 되지만
비클러스터형 에서는 비순차적으로 무작위 추가를 한다.
    
4. 인덱스 생성
       


디자인 > 필드선택 > 인덱스/키 설정 >  인덱스추가 > 열선택 > 인덱스 지정

-- 쿼리문으로 생성하기

-- 테스트용 테이블 만들기
CREATE TABLE userTbl
(
 Seq INT NOT NULL IDENTITY(1,1),
 userName nvarchar(30) NOT NULL,
 birthYear int NOT NULL,
 addr nvarchar(50) NOT NULL
)

-- addr필드에 비고유,비클러스터 인덱스 설정
CREATE INDEX idx_userTbl_addr
 ON userTbl(addr)

-- Seq필드에 클러스터 인덱스 설정
CREATE CLUSTERED INDEX idx_userTbl_Seq
 ON userTbl(Seq)

-- birthYear필드에 고유,비클러스터 인덱스 설정
CREATE UNIQUE INDEX idx_userTbl_birthYear
 ON userTbl(birthYear)

-- userName,birthYear필드에 비고유,비클러스터 인덱스 설정
CREATE NONCLUSTERED INDEX
 idx_userTbl_userName_birthYear
 ON userTbl(userName,birthYear)

5. 인덱스의 사용
   - 사용
   Where 절에서 사용되는 필드(컬럼,열)를 인덱스로 사용한다.
    join에 사용되는 열에는 인덱스를 사용한다.
   외래키에 인덱스를 설정하는것이 좋다.
   
  - 비사용
   데이터중복 빈도가 높은 열에는 인덱스를 사용하지 않는다.