두 개의 테이블이 있습니다. 표 people
(16500 행), (17000 행) visits
을 people
에 연결해야하므로 내 쿼리에 LEFT JOIN이 포함되어 있습니다. 방문 기록이없는 사람 레코드가 있으면 해당 방문 열이 NULL이된다는 것을 알고 있습니다.LEFT JOIN이 포함 된 쿼리의 mysql count 행이 서버를 중지합니다.
이 간단한 쿼리는 매력처럼 작동합니다. 내가를 죽일 때까지
SELECT * FROM people LEFT JOIN visits ON people.id = visits.id_people;
그러나 내가 행을 반환 계산하려고 할 때, MySQL은 (또는 계산) 30 + 초 달려 있습니다. 프로덕션 환경에서는 허용되지 않습니다.
여기 결과 행 계산에 사용하려고 시도한 여러 가지 방법이 있지만 모두 동일한 행 결과가 있습니다.
SELECT COUNT(*) FROM people LEFT JOIN visits ON people.id = visits.id_people;
SELECT SQL_CALC_FOUND_ROWS * FROM people LEFT JOIN visits ON people.id = visits.id_people;
SELECT FOUND_ROWS();
이상한 방법은 작은 테스트 테이블 (5 및 5 행)에서 잘 작동한다는 것입니다.
아무도 도와 줄 수 있습니까?
1. people.id 및 visits.id_people에 색인이 있습니까? 2. 사람들과 어떤 연관성도없이 방문 할 수 있습니까? 3. 사람들은 한번 이상 방문 할 수 있습니까? –
쿼리에서 EXPLAIN을 실행할 수 있습니까? –
굉장! 여러분, 저에게 올바른 방향을 알려 주셔서 감사합니다. 방문수에 두 가지 인덱스가 있어야한다는 것을 알지 못했습니다. 하나의 PRIMARY (내가 알고있는)와 하나의 INDEX가 visits.id_people에 설정되었습니다. 방금 ON으로 정의했다고 가정했습니다. 이제는 번개 속도로 작동합니다! ;) – meridius