인덱스를 사용하는 이유에 대해서 생각해보자 왜 사용할까?
- 조건을 만족하는 듀플(들)을 빠르게 조회하기 위해서
- 빠르게 정렬하거나 그룹핑 하기 위해서
사용한다고 볼 수 있다. 한마디로 정의하자면
특정 조건을 만족하는 데이터를 빠르게 찾기 위해 인덱스를 사용한다고 보면 된다.
MySql 기준으로 인덱스를 생성하려면
CREATE INDEX 인덱스명 ON 테이블명;
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
중복을 허용하지 않는 UNIQUE INDEX
CREATE UNIQUE INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2);
, 를 사용하여 여러 필드에 인덱스를 설정해 줄 수 있다.
인덱스는 대부분의 DBMS에서 프라이머리 키로 설정하면 자동으로 생성해준다.
인덱스를 확인하려면
SHOW INDEX FROM 테이블명;
쿼리를 사요하면 된다.
SELECT 쿼리에서 내가 원하는 인덱스를 사용하고 싶으면
SELECT * FROM 테이블명 INDEX (인덱스명) WHERE 조건절;
인덱스를 사용하면 조회시간을 단축할 수 있다. 그러면 최대한 많으면 많을수록 좋은게 아닐까?
그럴것 같지만 아니다.
인덱스를 생성할때마다 인덱스를 저장하는 부가적인 데이터가 생성되고, 테이블에 write (수정,삽입,삭제) 가 빈번하다면 인덱스도 동일하게 write 해줘야 하기 때문에 부하가 발생할 수 있고 저장공간의 낭비가 생길 수 있다.
그렇기 때문에 불필요한 인덱스는 만들지 말아야한다.
또 Full Scan 방식이 더 좋은 경우도 있다.
- table에 데이터가 별로 없는 경우 (수십~수백건)
- 조회하려는 데이터가 테이블의 상당 부분을 차지할때
'Back-End > DB' 카테고리의 다른 글
| SQL 파싱과 최적화 (3) | 2024.07.25 |
|---|---|
| Lock 과 트랜잭션 동시성 제어 (Oracle) (3) | 2024.07.23 |
| 인덱스의 기본 (2) (0) | 2023.10.12 |
| 인덱스의 기본 (3) | 2023.10.11 |
| DB 설계를 잘못하면 생기는 일 (1) | 2023.09.13 |