출처 : http://www.gurubee.net/pages/viewpage.action?pageId=2458051
**
IN을 고려한 결합 인덱스의 선정
인덱스의 선정
인덱스 선정절차
대용량 INDEX 처리에 관한 SQL
1. 결합인덱스의 장점
- 좋은 분포도 : 나쁜 분포도를 가진 column을 결합한 결합 인덱스가 더 좋은 분포도를 가질 수 있다.
- 저장 공간의 효율성 : 한 질의에 의해 선택된 모든 칼럼이 결합인덱스에 있을 경우, table을 access하지 않고 결합 인덱스 만으로
원하는 값을 가져올 수 있다. 그러나 그만큼의 디스크나 메모리에 부하가 많이 걸릴 것이다.
[예] select empno from emp where empno='123';
이 경우는 특별히 테이블을 access하지 않고 index만으로 해당값을 출력할수 있다. 따라서 검색속도가 비약적으로 빨라지는 효과를 볼 수 있습니다.
2. 결합 인덱스의 column선택을 위한 지침
- 각 column의 분포도 보다 결합 인덱스에서 결합된 분포도가 더 좋을 경우
- 여러 질의에서 하나이상의 칼럼값을 가진 칼럼의 동일한 집합을 질의할 경우, 이들 모든 칼럼을 포함하는 결합 인덱스 생성을 고려한다.
3. 결합 인덱스 구성시 column순서 배치를 위한
지침
- WHERE절에 사용된 칼럼을 선행부분으로 만들기 위한 결합 인덱스를 생성
- 칼럼의 일부가 WHERE절에서 자주 사용될 경우 =>자주 select되는 column을 선행부분올 만들어서 이 column만으로 인덱스를 사용할 수 있도록 한다.
- 모든 칼럼이 WHERE절에서 동일하게 사용되면 =>질의 성능을 개선하기 위하여 CREATE INDEX statement에서 분포도가 좋은 순서대로 배열
- 모든 칼럼이 WHERE절에서 동일하게 자주 사용되지만 데이터가 한 column에 대해 물리적으로 정렬되어 있으면 =>그 column을 결합 인덱스의 첫번째로 구성
- ‘=’을 사용할 땐 선택범위가 좁은 것을 앞에 놓는다.
4. in을 이용한 access효율 향상. (in은
‘=’의 의미를 가지고 있다.)
예) select * from tab1 where col1='a' and col2 between '111' and '112';
→select * from tab1 where col1='a' and col2 in('111', '112');
여기서 col2의 값이 적을수록 후자의 속도가 빨라진다. 물론 보통의 경우에도 후자가 빠르다.
일반적으로 between, like문이 들어가는 SQL문은 in문으로 대체해 준다.
5. 일부컬럼만 사용할
경우
만약 index가 (a+b+c)로 이루어져 있을 경우 where조건에서 a, a+b, a+c, a+b+c가 나오면 index적용이 가능
하지만, b, b+c가 나오면 index적용이 불가능하다. -> B*Tree에서 검색이 불가능 하기 때문에.. 따라서 결합인덱스의 첫 번째
컬럼이 꼭 나와야 index를 적용할 수가 있다. 아울러 대개의 결합인덱스는 최고 5개까지가 적당함. 그럼 간략히 정리를 해보겠습니다.
**
IN을 고려한 결합 인덱스의 선정
인덱스의 선정
인덱스 선정절차
대용량 INDEX 처리에 관한 SQL