2012-08-28 4 views
0

두 개의 테이블이 있습니다. 표 people (16500 행), (17000 행) visitspeople에 연결해야하므로 내 쿼리에 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

1. people.id 및 visits.id_people에 색인이 있습니까? 2. 사람들과 어떤 연관성도없이 방문 할 수 있습니까? 3. 사람들은 한번 이상 방문 할 수 있습니까? –

+1

쿼리에서 EXPLAIN을 실행할 수 있습니까? –

+0

굉장! 여러분, 저에게 올바른 방향을 알려 주셔서 감사합니다. 방문수에 두 가지 인덱스가 있어야한다는 것을 알지 못했습니다. 하나의 PRIMARY (내가 알고있는)와 하나의 INDEX가 visits.id_people에 설정되었습니다. 방금 ON으로 정의했다고 가정했습니다. 이제는 번개 속도로 작동합니다! ;) – meridius

답변

관련 문제