ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB 인덱스 (데량의 데이터에서는 인덱스가 있어야만 데이터를 빠른 시간에 검색될수 있음)
    Database/MS-SQL 2008. 10. 8. 10:50
    반응형
    데량의 데이터에서는 인덱스가 있어야만 데이터를 빠른 시간에 검색될수 있음

    장점 : 검색의 속도가 빨리질수있다
             시스템의 부하가 줄어들어서 결국 시스템의 전체의 성능이 향상된다
    단점 :  인덱스를 생성하는 데 시간이 많이 소요될수있다
             인덱스가 데이터베이스 공간을 차지해서 추가적인 공간이 필요해진다
           (대략 데이터베이스의 10% 내외의 공간이 추가로 필요하다)
           데이터의 변경작업(INSET UPDATE DETET)이 자주일어날경우 성능이 많이 나빠질수있다

    인덱스의 종류

    클러스터형 인텍스  -> 영어사전과 비슷한 개념
    비클러스터형 인텍스  -> 일반책의 찾아보기와 비슷한 개념

    특징 : 클러스터 형 인덱스는 테이블당 1개만 생성
    비클러스터형 인덱스는 테이블당 여러개 생성
    클러스스터형 인덱스는 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬한다
    제약 조건 없이 테이블 생성시에 인덱스를 만들 수 없다
    인덱스가 자동생성되기 위한 열의 제약조건은 Primary Key와 Unique 뿐이다


    제약조건을 통한 인덱스 생성

    제약조건과 인덱스 생성의 예

    CREATE TEABLE tbl2
    (
    a INT PRIMARY KEY,
    b INT UNIQUE,
    c INT UNIQUE,
    d INT
    )




    인덱스의 내부 작동

    B-Tree ( Balanced Tree 균형 트리)

    범용적으로 사용되는 데이터구조
    인덱스를 표현할때 만힝 사용됨
    데이터의 검색시(SELECT) 에 뛰어난 성능을 보일수있음
    데이터의 변경시(INTSET UPDATE DELETE)에 성능이 나빠짐


    인덱스의 내부 작동 (1)
    인덱스의 내부 작동 (2)
    인덱스의 내부 작동 (3)

    인덱스의 내부 작동 (4)

    뭐 더있는데 그냥 이런게 있다고만 알고있어라~ 알았제?? ㅋㅋ

    클러스터형 인덱스의 특징

    클러스터형 인덱스의 생성시에는 데이터페이지 전체를 다시 정렬하게 된다
    그러므로 클러스터형 인덱스를 생성은 심각한 시스템 부하를 줄 수 있다
    클러스터형 인덱스는 인텍스 자체의 리프프 페이지가 곧 데이터이다
    비클러스터형 보다 검색속도는 빠르다 하지만 데이터의 입력 수정 삭제는 더 느리다
    클러스터 인덱스는 성능이좋지만 테이블에 한개밖에 생성하지 못한다 그러므로
    어느열에 클러스터 형 인덱스를 생성하느냐
    에 따라서 시스템의 성능이 달라질 수 있다  (PK 를 잘 잡아야지 검색이 빠르게된다)

    비클러스터형 인덱스의 특징

    함부로 인덱스를 많이 걸떄는 시스템성능을 떨어뜨리는 결과를 초래한ㄹ수잇다
    클러스형보다 검색속도는 느리만 데이터의 변경을 더 빠르다
    비클러스터형 인덱스는 인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 
    포인터(RID) 이다
    비클러스터형 인덱스의 생성시에는 데이터 페이지는 그냥 둔 상태에서 별도의 페이지를 
    인덱스를 수성한다

    인덱스의 생성과 사용



    생성




    인덱스를 생성해야하는 경우와 그렇지 않은경우

    인덱스는 열 단위에 생성된다
    WHERE 절에서 사용되는 칼럼을 인덱스로 만든다
    WHERE 절에 사용되더라도 자주 사용해야 가치가 있다
    데이터의 중복도가 높은 열은 인덱스를 만들어도 별 효용이 없다
    외래키가사용되는 열에는 인덱스를 되도록 생성해주는것이 좋다
    JOIN 에 자주 사용되는 열에는 인덱스를 생성해 주는 것이 좋다(필수)
    INSERT / UPDATE /DELETE 가 얼마나 자주 일어나는 지를 고려한다
    클러스터형 인덱스는 하나만 생성할 수 있다
    클러스터형 인텍스가 테이블에 아예 없는 것이 좋은 경우도 있다
    사용하지 않는 인덱스는 제거하자
    계산열에도 인덱스를 활용할 수 있다














    반응형

    댓글

Designed by Tistory.