반응형
데량의 데이터에서는 인덱스가 있어야만 데이터를 빠른 시간에 검색될수 있음
장점 : 검색의 속도가 빨리질수있다
시스템의 부하가 줄어들어서 결국 시스템의 전체의 성능이 향상된다
단점 : 인덱스를 생성하는 데 시간이 많이 소요될수있다
인덱스가 데이터베이스 공간을 차지해서 추가적인 공간이 필요해진다
(대략 데이터베이스의 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 가 얼마나 자주 일어나는 지를 고려한다
클러스터형 인덱스는 하나만 생성할 수 있다
클러스터형 인텍스가 테이블에 아예 없는 것이 좋은 경우도 있다
사용하지 않는 인덱스는 제거하자
계산열에도 인덱스를 활용할 수 있다
'Database > MS-SQL' 카테고리의 다른 글
DATEBASE 쿼리 문제 실습 19~31 (0) | 2008.10.13 |
---|---|
TABLE에서 행을 삭제하는 세 가지 OPTION의 비교 DELETE TRUNCATE DROP 과 CREATE (0) | 2008.10.10 |
DATEBASE 쿼리 문제 실습 - 오픈과제 01.doc (0) | 2008.10.10 |
DB JOIN 서브쿼리 유니온 조인 레프트조인 라이트조인 (1) | 2008.10.08 |
테이블 뷰 (0) | 2008.10.07 |
임시테이블 테이블삭제수정 (0) | 2008.10.07 |
T-SQL 에서 테이블 생성 (0) | 2008.10.07 |
MSSQL2005 DB에서 관계맷기 (0) | 2008.10.07 |