MSSQL INDEX

2019. 1. 16. 22:28

index

인덱스를 해야하는 이유는 쿼리 속도를 늘리기 위해서,

  • 원래 50개의 데이터 -> 기계어 -> 메모리 or 하드에 01010101 로 데이터+주소를 파일형태로 저장
  • 하나의 쿼리 -> where를 이용해서 특정칼럼을 뽑아오는데, 파일시스템은 전체 데이터를 검색한다.
  • 특정칼럼을 인덱스로 지정해놓으면 (여러개 칼럼 중 자주 사용하는 특정칼럼(자주 변하는 체중))
    -> 컴퓨터가 인덱스 칼럼를 뽑아서 새로운 파일로 만들어 놓는다.
    -> 쿼리날릴 때 WHERE조건에 인덱스를 주면, 아주 빠르게 검색해온다.

  • 인덱스의 종류는 2가지가 있는데, Clustered / NonClustered가 있는데 Clustered가 더 빠르다.
  • MSSQL에서는 1개의 Clustered 밖에 못 만들고, 보통은 PRIMARY KEY를 인덱스로 지정한다.

  • 이름- 주민번호 / 주민번호-학번  의 2개의 테이블이 있다면,
    주민번호가 한 테이블의 PRIMARY KEY가 되고 -> 다른 테이블의 FOREIGN KEY가 되며 -> 각 KEY는 index로 잡혀 있는게 일반적인 RDB의 기본 index형태이다.

  • T-SQL에서는 1개의 CLUSTERED INDEX를 지정할 수 있으니
    WHERE절이나, JOIN절에 가장 많이 넣는 칼럼을 index로 지정하자.


가진 Table의 index 확인

sp_help 테이블네임 -> index가 있을 경우, index_name이 보인다.


sp_help BANK_A -> index 지정 안해줬으니 안나옴.


--★ Index 예시 ★--------
CREATE CLUSTERED INDEX personid ON Person (personid);
CREATE NONCLUSTERED INDEX birthday ON Person (birthday);

SET SHOWPLAN_ALL { ON | OFF } 
SET SHOWPLAN_TEXT { ON | OFF } 
SET STATISTICS IO { ON | OFF } 
SET STATISTICS TIME { ON | OFF } 
SET STATISTICS PROFILE { ON | OFF } 

+ Recent posts