이 질문에 100 번이나 물었습니다.이 질문은 "어떻게해야합니까?"가 아니라 효율적인 질문입니다 - 많이 알지 못하는 주제입니다. 약."가장 최근 행"에 참여하는 가장 효율적인 방법
제 인터넷 읽기에서 저는 매우 효율적이라고 들리는 가장 최근의 문제를 해결하는 한 가지 방법을 생각해 냈습니다 - 일치 조건에 따라 그룹화 된 "최대"테이블을 왼쪽으로 조인 한 다음 LEFT JOIN과 일치하는 행을 찾습니다 그룹화 된 조건. 다음과 같은 내용 :
Select employee.*, evaluation.* form employee
LEFT JOIN (select max(report_date) report_date, employee_id
from evaluation group by employee_id) most_recent_eval
on most_recent_eval.employee_id = employee.id
LEFT JOIN evaluation
on evaluation.employee_id = employee.id and evaluation.report_date = most_recent_eval.report_date
내가 모르는 문제가 있습니까? 이것은 2 개의 테이블 스캔을하고 있습니까? (하나는 최대 값을, 하나는 행을 찾으려고합니다)? 모든 직원에 대해 전체 스캔을 2 회해야합니까?
내가 가장 최근에 행 (평가, 보안 정리 및 프로젝트)이 필요한 3 개의 테이블에 참여하고 있으며 비효율적 인 부분이 대량으로 늘어나는 것처럼 보입니다.
아무에게도 이것에 대한 조언을 줄 수 있습니까?
'explain select ...'를 실행하여 질의가 무엇인지 확인할 수 있습니다. 질문. MySQL 웹 사이트에 결과를 해석하는 방법에 대한 자세한 지침이 있습니다. Explain 결과가 없으면 조회의 효율성을 알 수 없습니다. – Shadow
이것은 단순화 된 예제이며 많은 관련성없는 열을 포함하고있는 실제 쿼리의 출력으로 문제를 해결하지 않으려 고합니다. 저는 "가장 최근의"조인 문제를 해결하는 다양한 방법의 효율성에 대한 좀 더 일반적인 지침을 찾고 있습니다.이제 설명 출력에 관한 책을 열어서, 그 포인터에 대해 고맙습니다. – whiteatom
Explain 결과를 살펴보면 가장 최근의 평가판이 파생 테이블에 대한 데카르트 조인 (조인 유형 아래에 ALL 표시)을 수행하는 것이 나의 하위 쿼리로 나타납니다. start_date에 대한 인덱스가 있습니다. 사용하면 안됩니까? – whiteatom