고양이 여름이의 지식채널
MySQL 쿼리 explain 설명 본문

'EXPLAIN' 키워드는 MySQL 쿼리의 실행 계획을 분석할 수 있는 강력한 도구입니다. 쿼리 실행 계획을 검토하여 병목 현상이나 성능 문제를 식별하고 쿼리를 최적화하는 단계를 수행할 수 있습니다.
기본 사용법
EXPLAIN SELECT * FROM orders WHERE customer_id = 123;
쿼리 앞부분에 explain 명령어를 포함시켜 실행시키면 MySQL이 쿼리를 실행하는 방법에 대한 정보를 제공하는 테이블을 출력합니다.
Output Columns
- id : 실행 계획 내의 각 쿼리 블록에 대한 고유 식별자입니다.
- select_type : 수행 중인 SELECT 작업 유형 (예: SIMPLE, Subquery, UNION)
- table : 액세스하거나 조인하는 테이블의 이름입니다.
- type : 사용 중인 조인 유형(예: ALL, INDEX, RANGE, REF, SYSTEM).
- possible_keys : 쿼리를 최적화하는 데 잠재적으로 사용할 수 있는 인덱스 목록입니다.
- key : MySQL이 쿼리에 사용하도록 선택한 인덱스입니다.
- key_len : 인덱스의 길이입니다.
- ref : key와 비교되는 필드를 나타냅니다.
- rows : MySQL에서 쿼리를 실행하기 위해 검사해야 하는 예상 행 수입니다.
- Extra : 쿼리 실행 방법(예: 파일 정렬 또는 임시 테이블 사용 여부)에 대한 추가 정보입니다.

Extra 실행정보
using temporary 는 MySQL이 쿼리를 실행하기 위해 임시 테이블을 만들어야 함을 나타냅니다. 임시 테이블은 메모리 사용량과 디스크 I/O 측면에서 부담 될 수 있으므로 이를 사용하는 쿼리는 그렇지 않은 쿼리보다 느릴 수 있습니다.
MySQL이 임시 테이블을 사용해야 하는 일반적인 이유 중 하나는 대규모 결과 집합에서 GROUP BY 또는 DISTINCT 연산을 수행할 때입니다. 이걸 고려해서 최적화를 해야합니다.
using filesort 는 MySQL이 쿼리를 실행하기 위해 filesort 작업을 수행해야 함을 나타냅니다. 파일 정렬 속도가 느리고 리소스를 많이 사용하므로 파일 정렬을 사용하는 쿼리 속도가 느릴 수 있습니다.
파일 정렬을 수행할 때 MySQL은 데이터를 디스크에 쓴 다음 정렬된 순서로 다시 읽습니다.(2번한다고 보면됨)
using where 은 MySQL이 WHERE 절을 사용하여 쿼리에서 반환되는 행을 필터링하고 있음을 나타냅니다. 이것은 대부분의 쿼리에서 정상적인 부분이며, 반드시 성능 문제를 나타내는 것은 아닙니다.
그러나 WHERE 절이 최적화되지 않으면 쿼리 성능이 저하될 수 있습니다.
using index 는 MySQL이 인덱스를 사용하여 쿼리를 수행하고 있음을 나타냅니다. 인덱스를 사용하면 쿼리 성능을 크게 향상시킬 수 있으므로 일반적으로 이 방법이 좋습니다.
그러나 모든 인덱스가 동일하게 생성되는 것은 아닙니다. MySQL이 비선택적 인덱스를 사용하는 경우 결과 집합을 반환하기 위해 테이블에서 많은 행을 읽어야 할 수 있습니다. 이는 단순히 전체 테이블 스캔을 수행하는 것보다 느릴 수 있습니다.
쿼리를 최적화하는데 사용할 수 몇 가지 팁
- 많은 행을 scan 하는 쿼리를 찾습니다. (rows) 쿼리 행 열이 많으면 쿼리가 비효율적이며 추가 인덱싱 또는 기타 최적화를 통해 개선해야합니다.
- 많은 수의 임시 테이블 또는 파일 정렬 작업(sort) 을 사용하는 쿼리를 찾습니다. 이는 비효율적인 정렬 또는 그룹화의 지표가 될 수 있습니다.
- 인덱스를 사용하지 않는 쿼리를 찾습니다. 키 열(key)이 "NULL"이면 쿼리가 인덱스를 사용하지 않고 있으며 적절한 인덱스를 추가하여 최적화할 수 있습니다.
[Linux] 리눅스 권한과 chmod 옵션 예제
리눅스는 사용자와 프로세스에 다양한 수준의 권한을 제공하는 다중 사용자 운영 체제입니다. 권한 변경은 chmod 라는 명령어로 설정이 가능합니다. chmod 는 파일과 디렉터리의 권한을 변경하는
summer-cat93.tistory.com