MySQL 쿼리 최적화의 중요성
* 공부하면서 정리하는 포스팅
[실험 조건]- MySQL 5.6
- "Log" Table -> 약 160만개의 Tuple / "Country" Table -> 약 200개의 Tuple
- vCPU 1, RAM 1GB, HDD
1. COUNT(*)과 COUNT(ID)의 차이
INDEX가 걸려있다고 하더라도, COUNT(*)가 COUNT(ID)에 비해 압도적으로 빠르다> COUNT(*)은 B+ Tree를 따라 Tuple 갯수만 카운트하고 끝나지만
> COUNT(ID)는 직접 모든 Tuple을 열어서, NULL인지 값이 있는지 체크하기 때문
Tuple의 갯수를 카운트 할때는
특정 column을 지정해 카운트 하는 것 보단 COUNT(*)이 효율적이다.
2. ORDER BY
ORDER BY는 생각보다 많은 시간을 요하게 된다. (위 사진은 ORDER BY를 제한 결과)
특히 100만개x100개 정도를 filesort로 JOIN을 하게 되면,
해당 조건의 DB가 뻗어버린다.
> 상황에 따라선 정렬의 역할을 DB가 아니라 Application에서 하는게 좋을 지도 모른다
3. Primary Key 선정
위 사진 두개는 Primary Key가 char(3) 일때와 int 일때와의 차이이다.> Primary Key는 가급적 int로 하면 좋다.
쿼리 하나에 6.91초가 걸리는 것도 말이 안되지만, 44.64초는 정말 폐급(?)이다.
DB는 나에게 정말 어려운 파트이다.
더 열심히 공부해야겠다.
댓글
댓글 쓰기