집 >데이터 베이스 >MySQL 튜토리얼 >내 쿼리가 임시 테이블과 파일 정렬을 사용하는 이유는 무엇입니까?
MySQL이 이 쿼리에서 Temporary 및 Filesort를 사용하는 이유
event_log 및 lookup_event_objects 테이블에서 객체 통계를 추출하는 쿼리에 성능 병목 현상이 발생합니다. EXPLAIN 출력 "인덱스 사용, 임시 사용, 파일 정렬 사용"에 표시된 대로입니다. 그 이유는 다음과 같습니다.
임시 테이블
MySQL은 ORDER BY 및 GROUP BY 절이 일치하지 않거나 정렬 또는 그룹화 열이 non에 속할 때 임시 테이블을 사용합니다. -조인된 테이블. 이 경우 ORDER BY 절(count_rows DESC, leo.object_desc ASC)이 GROUP BY 절(el.object_id)과 다르기 때문에 쿼리에 첫 번째 조건이 적용되지 않습니다.
Filesort
"Using filesort"는 MySQL이 ORDER에 지정된 정렬을 수행할 수 없음을 나타냅니다. 인덱스를 사용하는 BY 절. 계산된 필드(count_rows)를 기준으로 정렬하므로 데이터베이스는 전체 테이블 스캔을 수행하고 결과를 정렬해야 합니다.
가능한 솔루션
에서 제안한 대로 제공된 답변에 대한 해결책은 ORDER BY 절과 GROUP BY 절 사이의 불일치를 제거하는 것입니다. GROUP BY 절 내에서 count_rows 별칭을 실제 개수 작업으로 바꿀 수 있습니다.
이렇게 하면 임시 테이블과 파일 정렬이 필요하지 않아 잠재적으로 쿼리 성능이 향상됩니다.
위 내용은 내 쿼리가 임시 테이블과 파일 정렬을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!