인덱스 사용, 임시 사용, 파일 정렬 사용: MySQL 쿼리에 최적화가 필요합니까?
데이터베이스 테이블에서 데이터를 검색할 때 다음이 중요합니다. 처리 시간과 리소스 소비를 최소화하는 효율적인 쿼리를 작성합니다. MySQL은 더 빠른 쿼리 실행을 촉진하기 위해 다양한 최적화 기술을 제공하지만 때로는 쿼리가 여전히 최적이 아닌 동작을 나타낼 수 있습니다. 이 경우 EXPLAIN 출력에서 "Using index; Using temporary; Using filesort"를 반환하는 쿼리를 살펴보겠습니다.
제공된 쿼리를 살펴보겠습니다.
explain SELECT el.object_id, leo.object_desc, COUNT(el.object_id) as count_rows FROM event_log el LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id GROUP BY el.object_id ORDER BY count_rows DESC, leo.object_desc ASC
"임시 사용" 이해
MySQL 문서에는 ORDER BY와 GROUP BY 절 사이에 불일치가 있거나 ORDER BY 또는 GROUP BY에 테이블의 열이 포함된 경우 임시 테이블을 생성할 수 있다고 명시되어 있습니다. 조인 대기열의 첫 번째 테이블이 아닌 경우. 이 쿼리에서는 두 가지 조건이 모두 충족되었습니다. ORDER BY 절은 계산 필드인 count_rows를 기준으로 정렬하고, GROUP BY 절은 다른 테이블의 el.object_id를 기준으로 그룹화합니다. 따라서 임시 테이블을 사용하여 정렬 및 그룹화 프로세스를 용이하게 합니다.
"Filesort 사용" 이해
정렬은 계산된 필드 count_rows에서 수행되므로, 이 작업에는 인덱스를 사용할 수 없습니다. 따라서 MySQL은 결과를 반환하기 전에 디스크에서 데이터를 읽고 메모리에서 정렬하는 filesort를 사용합니다.
쿼리 최적화
성능을 향상하기 위해 이 쿼리를 사용하고 임시 테이블 및 파일 정렬의 사용을 제거하려면 다음과 같은 적절한 인덱스 생성을 고려할 수 있습니다.
CREATE INDEX idx_event_log_object_count ON event_log(object_id, COUNT(event_id));
이 인덱스를 사용하면 MySQL이 각 object_id에 대한 이벤트 수를 직접 검색하여 제거할 수 있습니다. 임시 테이블과 파일 정렬이 필요합니다.
위 내용은 내 MySQL 쿼리가 \'인덱스 사용, 임시 사용, 파일 정렬 사용\'을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!