>데이터 베이스 >MySQL 튜토리얼 >내 쿼리가 임시 테이블과 파일 정렬을 사용하는 이유는 무엇입니까?

내 쿼리가 임시 테이블과 파일 정렬을 사용하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-05 01:15:02344검색

Why Does My Query Use Temporary Tables and Filesort?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.