일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- windows11install
- SQL
- 선택정렬
- 윈도우11네트워크없이설치
- 알고리즘
- mssql호환성수준확인
- 분할정복법
- 톰캣버전확인
- mssql프로시저검색
- 코딩테스트
- 윈도우11인터넷없이설치
- sql튜닝
- 삽입정렬
- 호환성수준변경
- w3wp.exe
- 프로세스에연결
- SQLD
- It
- 비밀번호
- mssql함수검색
- 예제
- GROOUPING SETS
- 독학
- mssql호환성수준
- it자격증추천
- 순환
- adsp공부방법
- 상태공간트리
- 코테
- windows11setup
- Today
- Total
404 not found
[SQL 성능 분석하기] 인덱스 본문
인덱스
1. 인덱스의 필요성
사용자가 인덱스를 사용하는 이유
: 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기위해 인덱스를 생성
일반적으로, 인덱스는 테이블 전체 데이터 중 10~15% 이하의 테이블을 처리하는 경우에 효율적
2. B*Tree 구조
: 가장 많이 사용되는 인덱스의 구조/인덱스의 데이터 저장방식
: Root / Branch / Leaf Node
* Branch 노드
: Leaf 노드에 연결되어있으며, 조회하려는 값이 있는 Leaf노드까지 도달하기 위해 비교/분기해야 될 값들이 저장됨
* Leaf 노드 = 인덱스 칼럼의 값(오름/내림 차순으로 Sort되어 저장됨)
+ ROWID(테이블에 있는 해당 row를 찾기위해 사용되는 논리적인 저장위치 정보)
B*Tree 구조의 핵심은 Sort
1) ORDERBY 에 의한 Sort를 피할 수 있음
2) MAX/MIN의 효율적인 처리가 가능
3. 인덱스 선정 절차
1) 프로그램 개발에 이용된 모든 테이블에 대하여 Access Path 조사
2) 인덱스 칼럼 선정 및 분포도 조사
3) Critical Access Path 결정 및 우선 순위 선정
4) 인덱스 칼럼의 조합 및 순서 결정
5) 시험 생성 및 테스트
6) 결정된 인덱스를 기준으로 프로그램 반영
7) 실제 적용
4. 인덱스 생성 및 변경 시 고려할 사항
1) 기존 프로그램의 동작에 영향성 검토
2) 필요할 때마다 인덱스 생성으로 인한 인덱스 개수의 증가와 이로 인한 DML 작업의 속도
3) 비록 개별 칼럼의 분포도가 좋지 않을지라도 다른 칼럼과 결합하여 자주 사용되고,
결합할 경우에 분포도가 양호하다면 결합 인덱스 생성을 긍정적 검토
5. 인덱스 스캔의 원리
1) 조건을 만족하는 최초의 인덱스 row를 찾음
2) Access된 인덱스 row의 ROWID를 이용해서 테이블에 있는 row를 찾음(Random Access)
3) 처리 범위가 끝날 때까지 차례대로 다음 인덱스 row를 찾으면서 2)를 반복함
* 인덱스 스캔 시에는 한 번의 I/O가 발생할 때 마다 한 개의 Block씩을 처리함
ROWID in ORACLE(확장형)
1) 데이터를 가진 테이블 정보
2) 테이블을 만들 때 지정했던 테이블 스페이스를 구성하는 파일정보\
3) 해당데이터가 들어있는 블락 정보
4) 블락 안에서 몇 번째 데이터인지 순서 정보
6. 인덱스 사용
1) 고유(Unique) 인덱스의 Equal(=) 검색
2) 고유(Unique) 인덱스의 범위(Range) 검색 (<,>,>=,<=)
3) 중복(Non-Unique) 인덱스의 범위(Range) 검색 (문자형 데이터일 때, like,=)
4) OR & IN 조건 - 결과의 결합
5) NOT BETWEEN 검색
'SQL > SQL튜닝' 카테고리의 다른 글
[SQL 성능 분석하기] NESTED LOOPS 조인 (0) | 2021.07.19 |
---|---|
[SQL 성능 분석하기] 인덱스 활용이 불가능한 경우 (0) | 2021.07.13 |
[SQL 성능 분석하기] 결합 인덱스 (0) | 2021.07.13 |
[SQL 성능 분석하기] 옵티마이저 (0) | 2021.07.11 |
[SQL 성능 분석하기] 실행계획 (0) | 2021.07.08 |