SQL의 성능은 처리범위에 좌우된다.
이를 인덱스를 잘 설정하면 처리범위를 최소화 할 수 있게 되고, 결국 성능을 향상시킬수 있다.
0. 인덱스를 거는 이유
1. 처리범위의 양을 줄이기위해
2. 랜덤액세스의 양을 줄이기위해
3. 정렬횟수를 줄이기위해
1. 처리범위의 양을 줄이기위해
1.1. 결합인덱스를 구성하는 컬럼의 순서
2. 랜덤 액세스의 양을 줄이기위해
2-1. 랜덤 액세스의 종류
2.1.1. 확인 랜덤 액세스
WHERE, HAVING조건의 컬럼이 인덱스에 존재하지 않아 발생하는 랜덤 액세스
- 점조건, 선분조건으로 인덱스를 걸어준다.
2.1.2 추출 랜덤 액세스
2.1.3 정렬 랜덤 액세스
2.1.4 요약
종류 | 발생 위치 | 추출된 데이터의 갯수 |
---|---|---|
확인 랜덤 액세스 | WHERE 절/HAVING 절 | 감소 또는 동일 |
정렬 랜덤 액세스 | ORDER BY 절/GROUP BY 절 | 동일 |
추출 랜덤 액세스 | SELECT 절 | 동일 |
3. 정렬횟수를 줄이기위해
ORDER BY를 사용하지 않더라도, 인덱스에 의해서 정렬이 되기 때문에, 인덱스를 잘 활용하면 정렬의 양을 줄일수 있다.
DBMS에서 SQL의 정렬을 제거할 수 있다면, SQL의 단순화와 성능 향상이라는 매우 큰 혜택을 얻을 것이다.
테이블 - 데이터가 INSERT되는 순서에 의해 저장되므로 어떤 컬럼에 의해 정렬된 데이터가 저장되지않는다.
인덱스 - 인덱스를 구성하는 컬럼에 의해 정렬된 데이터가 저장된다. 인덱스의 첫번째 컬럼에 의해 정렬되며, 첫번째 컬럼의 값이 동일한 데이터에 대해서는 인덱스의 두번째 컬럼에 의해 정렬된다.
인덱스 조건 : 점조건~ ORDER BY절의 컬럼순서대로 ~ 선분조건~
출처 : http://www.gurubee.net/expert/kwontra
'SQL > SQL 튜닝' 카테고리의 다른 글
클러스터인덱스와 넌클러스터인덱스 (0) | 2017.10.24 |
---|---|
Nested Loop, Sort Merge, Hash JOIN (0) | 2017.10.23 |
옵티마이저 이해하기 - 1 (0) | 2017.10.23 |
쿼리튜닝팁 (0) | 2017.09.20 |
쿼리실행순서 (0) | 2017.09.01 |