
# 실행 계획 조회하기 EXPLAIN [SQL문] # 실행 계획에 대한 자세한 정보 조회하기 EXPLAIN ANALYZE [SQL문]
DROP TABLE IF EXISTS users; # 기존 테이블 삭제 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT );
INSERT INTO users (name, age) VALUES ('박미나', 26), ('김미현', 23), ('김민재', 21), ('이재현', 24), ('조민규', 23), ('하재원', 22), ('최지우', 22);
EXPLAIN SELECT * FROM users WHERE age = 23;

id : 실행 순서select_type : (처음에는 몰라도 됨)table : 조회한 테이블 명partitions : (처음에는 몰라도 됨)type : 테이블의 데이터를 어떤 방식으로 조회하는 지 ⭐️⭐️⭐️possible keys : 사용할 수 있는 인덱스 목록을 출력 ⭐️key : 데이터 조회할 때 실제로 사용한 인덱스 값 ⭐️key_len : (처음에는 몰라도 됨)ref : 테이블 조인 상황에서 어떤 값을 기준으로 데이터를 조회했는 지rows : SQL문 수행을 위해 접근하는 데이터의 모든 행의 수 (= 데이터 액세스 수) ⭐️⭐️⭐️filtered : 필터 조건에 따라 어느 정도의 비율로 데이터를 제거했는 지 의미Extra : 부가적인 정보를 제공 ⭐️Using where, Using index 주의점)rows,filtered의 값은 정확한 수치가 아닌 추정값이기 때문에 오차가 있을 수 있다.
EXPLAIN ANALYZE SELECT * FROM users WHERE age = 23;

Table scan on users : users 테이블을 풀 스캔했다.rows : 접근한 데이터의 행의 수actual time=0.0437..0.05020.0437 (앞에 있는 숫자) : 첫 번째 데이터에 접근하기까지의 시간0.0502 (뒤에 있는 숫자) : 마지막 데이터까지 접근한 시간Filter: (users.age = 23) : 필터링을 통해 데이터를 추출했다. 필터링을 할 때의 조건은 users.age = 23이다. users테이블의 모든 데이터(7개)에 접근했다. 그러고 그 데이터 중age = 23의 조건을 만족하는 데이터만 필터링해서 조회해왔다.