인덱스 설정법
인덱스와 조인(JOIN)에 대한 이해만 정확하게 하고 있으면 최적화된 SQL을 작성하는데 큰 도움이 된다.
인덱스(Index)란?
- 해당 데이터의 검색을 위해 전체 테이블을 읽지 않고 해당 row의 주소를 통해서 직접 접근할 경우에 사용
- 특정 칼럼에 Index를 생성하면, 해당 칼럼의 데이터들을 정렬하여 별도의 공간에 데이터의 물리적 주소와 함께 저장한다.
- NULL 은 Index 만들어지지 않는다. NULL이 많은 항목은 Index 로는 부적합하다.
- Index 의 가장 중요한 기능은 데이터의 조회(select) 속도를 빠르게 하는 것이다.
Index가 없다면 특정한 값을 찾기 위해 모든 데이터를 다 뒤져야 한다. - 테이블을 삭제하면 관련 인덱스는 자동으로 삭제된다.
- 인덱스를 사용하면 디스크의 I/O를 감소시킬 수 있다.
기본적으로 조건절에 등장하는 칼럼과 조인 조건으로 사용되는 컬럼에는 인덱스를 만드는 것이 성능 면에서 유리하다.
인덱스 설정
생성 |
오라클 |
CREATE INDEX <인덱스명> ON <테이블명> (칼럼); |
MySQL |
CREATE INDEX <인덱스명> ON <테이블명> (칼럼); CREATE UNIQUE INDEX <인덱스명> ON <테이블명> (칼럼); --UNIQUE 인덱스 ALTER TABLE <테이블명> ADD INDEX <인덱스명> (칼럼); ALTER TABLE <테이블명> ADD INDEX (A,B,C) ; -- 결합인덱스 설정 |
|
삭제 |
오라클 |
DROP INDEX <인덱스명>; |
MySQL |
ALTER TABLE <테이블명> DROP INDEX <인덱스명>; DROP INDEX <인덱스명> ON <테이블명>; |
|
보기 |
오라클 |
|
MySQL |
SHOW INDEX FROM <테이블명>; SHOW KEYS FROM <테이블명>; |
|
검사 |
오라클 |
|
MySQL |
해당 쿼리문이 인덱스를 타는지 안타는지 알기 위해서는 쿼리문 앞에 |
MySQL 인덱스 설정 예시
ALTER TABLE `SALES_DATA`
ADD KEY `shop_agent_ym` (`shop_code`,`agent_code`,`YM`);
ref : 조인의 순서와 상관없이 사용되며, primary key나 unique 키 등의 제약조건이 없다. 인덱스의 종류와 관계없이 동등 조건으로 검색할 때는 ref 접근 방법이 사용된다.
'SQL' 카테고리의 다른 글
[MySQL] IF Select (0) | 2015.04.03 |
---|---|
[MySQL] 조건에 따라서 값을 지정해 주는 CASE문 (0) | 2015.02.28 |
[SQL] WHERE 기능, 성능향상 팁 ***** (1) | 2015.02.01 |
MySQL 운영 문제점과 해법들 (0) | 2015.01.31 |
[SQL] 쿼리(Query)의 개념 (0) | 2015.01.26 |