SQL 쿼리 성능 확인 / 비교 방법

쿼리라는 게 다루는 데이터 용량이 작으면 어떻게 하든 결과만 나오면 그만이다. 그러나 데이터 용량이 클수록 성능에 신경을 써줘야 한다.

잘못된 쿼리 하나 하나가 서버 리소스를 불필요하게 잡아먹고 최악의 경우 서비스 다운까지 발생할 수 있기 때문이다.

쿼리 성능을 확인하고 서로 비교하기 위해 EXPLAIN 구문을 사용할 수 있다.

1. EXPLAIN 구문

사용 방법은 그냥 확인하려는 쿼리 앞에 EXPLAIN을 붙이면 된다. 예를 들어

EXPLAIN select * from table_name;

이런 식이다.

2. 쿼리 비교

테이블을 연결해서 결과를 낼 때 JOIN을 쓸 수도 있고 그냥 from 절에 테이블을 두 개 연속으로 놓고 where 조건을 걸 수도 있는데 이때 두 쿼리를 비교해 보자면

1.

EXPLAIN
SELECT e.name, d.department_name FROM Departments d, Employees e
WHERE d.department_id = e.department_id
;
쿼리 예시

2.

EXPLAIN 
SELECT e.name, d.department_name FROM Departments d
JOIN Employees e
ON d.department_id = e.department_id
;
쿼리 예시

explain을 이용한 두 쿼리 결과가 같은 걸 알 수 있다. 두 쿼리가 작동하는 시나리오가 같다는 의미다. 두 쿼리의 성능도 같다고 볼 수 있다.

3. 컬럼 별 의미

explain 결과
  • id : select 쿼리문 식별자. 둘 다 1로 같아 동일한 select 작업임을 의미
  • select_type : select 쿼리의 타입. SIMPLE이라는 결과는 union이나 서브쿼리 등이 없다는 뜻
  • table : 테이블 별칭. 쿼리에 각각 d와 e로 설정했음
  • type : ALL은 테이블 전체를 스캔한다는 의미. 일반적으로 ALL은 성능에 좋지 못한 시그널
  • possible_key : index로 사용할 수 있어 보이는 행
  • key : 실제 index로 사용한 행. 여기선 인덱스로 사용할 수 있는 키가 있음에도 쓰지 않아 NULL로 표기되는데 이는 데이터 사이즈가 워낙 작아서 쿼리 옵티마이저가 키를 안 쓴 것
  • key_len : 사용된 키의 길이
  • rows : 검색이 필요한 행 수
  • Extra : 쿼리 실행에 대한 추가 정보. where 절을 사용하고 join buffer를 사용한다는 걸 알려줌

댓글 남기기