✔ 인덱스 기본
관계형 데이터베이스의 인덱스
- 인덱스를 통해 검색 조건을 만족하는 데이터를 효과적으로 찾을 수 있음
- 기본 인덱스는 UNIQUE와 NOT NULL의 제약조건을 가짐
- 보조 인덱스는 UNIQUE 인덱스가 아니라면 중복 데이터의 입력이 가능함
- 자주 변경되는 속성은 UPDATE, DELETE 성능에 좋지 않은 영향을 미치므로 인덱스 후보로 적절하지 않음
- 테이블의 전체 데이터(대량 데이터)를 읽는 경우는 인덱스가 거의 불필요하며 인덱스를 사용하지 않는 FTS를 사용
- 인덱스는 조회만을 위한 오브젝트이며, 삽입, 삭제, 갱신의 경우 인덱스를 함께 변경해야 하므로 오히려 부하를 가중함
- 대량의 데이터를 삽입할 때는 모든 인덱스를 제거하고, 데이터 삽입이 끝난 후에 인덱스를 다시 생성하는 것이 좋음
B-TREE 인덱스
- 관계형 데이터베이스의 주요 인덱스 구조
- 일치 및 범위 검색에 적절한 구조
- 브랜치 블록과 리프 블록으로 구성
- 브랜치 블록은 분기를 목적으로 하고 리프 블록은 인덱스를 구성하는 칼럼의 값을 정렬됨
- 브랜치 블록의 가장 왼쪽 값이 찾고자 하는 값보다 작으면 왼쪽 포인터로 이동,
찾고자 하는 값이 브랜치 블록의 값 사이에 존재하면 가운데 포인터로 이동,
오른쪽에 있는 값보다 크면 오른쪽 포인터로 이동
이 과정을 리프 블록을 찾을 때까지 반복하여 값이 존재하면 해당 값을 찾은 것이고, 없으면 해당 값이 존재하지 않아 검색에 실패 - 일반적으로 OLTP 시스템 환경에서 가장 많이 사용
CLUSTERED 인덱스
- 인덱스의 리프 페이지가 곧 데이터 페이지
- 리프 페이지의 모든 데이터는 인덱스 키 칼럼 순으로 물리적으로 정렬되어 저장
- SQL Server의 클러스터형 인덱스는 ORACLE의 IOT와 매우 유사
BITMAP 인덱스
- 시스템에서 사용될 질의를 시스템 구현 시에 모두 알 수 없는 경우인 DW 및 AD-HOC 질의 환경을 위해서 설계
- 하나의 인덱스 키 엔트리가 많은 행에 대한 포인터를 저장하고 있는 구조
성능과 인덱스
- 인덱스의 목적은 조회 성능을 최적화하는 것
- 인덱스는 인덱스 구성 칼럼으로 정렬 순서를 지정할 수 있음
- 인덱스 구성 순서에 따라 성능이 바뀌게 됨 (동등 검색 조건이 앞 순서에 있는 것이 범위 검색 조건보다 효율적)
- 비용 기반 옵티마이저는 소요되는 비용을 계산하여 실행계획을 생성하므로
인덱스가 존재하더라도 전체 테이블 스탠이 유리하다고 판단할 수도 있음 - 규칙 기반 옵티마이저는 적절한 인덱스가 존재하면 전체 테이블 스캔보다는 항상 인덱스를 사용하려고 함
- 인덱스 범위 스캔은 결과 건수만큼 반환하지만, 결과가 없으면 한 건도 반환하지 않을 수 있음
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] 목차 (0) | 2023.10.26 |
---|---|
[SQL개발자] SQL 최적화 기본 원리 - 조인 수행 원리 (0) | 2023.10.21 |
[SQL개발자] SQL 최적화 기본 원리 - 옵티마이저와 실행계획 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 절차형 SQL (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 윈도우 함수 (0) | 2023.10.20 |
✔ 인덱스 기본
관계형 데이터베이스의 인덱스
- 인덱스를 통해 검색 조건을 만족하는 데이터를 효과적으로 찾을 수 있음
- 기본 인덱스는 UNIQUE와 NOT NULL의 제약조건을 가짐
- 보조 인덱스는 UNIQUE 인덱스가 아니라면 중복 데이터의 입력이 가능함
- 자주 변경되는 속성은 UPDATE, DELETE 성능에 좋지 않은 영향을 미치므로 인덱스 후보로 적절하지 않음
- 테이블의 전체 데이터(대량 데이터)를 읽는 경우는 인덱스가 거의 불필요하며 인덱스를 사용하지 않는 FTS를 사용
- 인덱스는 조회만을 위한 오브젝트이며, 삽입, 삭제, 갱신의 경우 인덱스를 함께 변경해야 하므로 오히려 부하를 가중함
- 대량의 데이터를 삽입할 때는 모든 인덱스를 제거하고, 데이터 삽입이 끝난 후에 인덱스를 다시 생성하는 것이 좋음
B-TREE 인덱스
- 관계형 데이터베이스의 주요 인덱스 구조
- 일치 및 범위 검색에 적절한 구조
- 브랜치 블록과 리프 블록으로 구성
- 브랜치 블록은 분기를 목적으로 하고 리프 블록은 인덱스를 구성하는 칼럼의 값을 정렬됨
- 브랜치 블록의 가장 왼쪽 값이 찾고자 하는 값보다 작으면 왼쪽 포인터로 이동,
찾고자 하는 값이 브랜치 블록의 값 사이에 존재하면 가운데 포인터로 이동,
오른쪽에 있는 값보다 크면 오른쪽 포인터로 이동
이 과정을 리프 블록을 찾을 때까지 반복하여 값이 존재하면 해당 값을 찾은 것이고, 없으면 해당 값이 존재하지 않아 검색에 실패 - 일반적으로 OLTP 시스템 환경에서 가장 많이 사용
CLUSTERED 인덱스
- 인덱스의 리프 페이지가 곧 데이터 페이지
- 리프 페이지의 모든 데이터는 인덱스 키 칼럼 순으로 물리적으로 정렬되어 저장
- SQL Server의 클러스터형 인덱스는 ORACLE의 IOT와 매우 유사
BITMAP 인덱스
- 시스템에서 사용될 질의를 시스템 구현 시에 모두 알 수 없는 경우인 DW 및 AD-HOC 질의 환경을 위해서 설계
- 하나의 인덱스 키 엔트리가 많은 행에 대한 포인터를 저장하고 있는 구조
성능과 인덱스
- 인덱스의 목적은 조회 성능을 최적화하는 것
- 인덱스는 인덱스 구성 칼럼으로 정렬 순서를 지정할 수 있음
- 인덱스 구성 순서에 따라 성능이 바뀌게 됨 (동등 검색 조건이 앞 순서에 있는 것이 범위 검색 조건보다 효율적)
- 비용 기반 옵티마이저는 소요되는 비용을 계산하여 실행계획을 생성하므로
인덱스가 존재하더라도 전체 테이블 스탠이 유리하다고 판단할 수도 있음 - 규칙 기반 옵티마이저는 적절한 인덱스가 존재하면 전체 테이블 스캔보다는 항상 인덱스를 사용하려고 함
- 인덱스 범위 스캔은 결과 건수만큼 반환하지만, 결과가 없으면 한 건도 반환하지 않을 수 있음
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] 목차 (0) | 2023.10.26 |
---|---|
[SQL개발자] SQL 최적화 기본 원리 - 조인 수행 원리 (0) | 2023.10.21 |
[SQL개발자] SQL 최적화 기본 원리 - 옵티마이저와 실행계획 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 절차형 SQL (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 윈도우 함수 (0) | 2023.10.20 |