내 Mysql 문에 실제 문제가 있습니다. 몇 가지 테이블을 함께 조인하고 다른 테이블의 평균 값으로 쿼리해야합니다. 이 지금 MYSQL 쿼리 (효율성)에 대한 문제
SELECT
ROUND(avg(re.rating), 1)AS avg_rating,
s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
GROUP BY staff_id
ORDER BY avg_rating DESC
은 내가이 오류를 얻고 있지만이 작업을 생각 ... 내가 가진 것입니다 "선택은 MAX_JOIN_SIZE 행 이상을 검사 것이다 확인하여 WHERE 및 사용 SET SQL_BIG_SELECTS = 1 또는 SET SQL_MAX_JOIN_SIZE = # 괜찮 으면 선택 ".
나는 이것이 너무 많은 조인을 가지며 공유 호스팅을 통해 커다란 쿼리가 실행되는 것을 허용하지 않는다고 생각합니다.
제가 알고 싶은 것은 오류가 무엇을 의미하는지 (나는 봤지만 대답을 이해하지 못함) 어떻게 내 질문을보다 효율적으로 만들 수 있습니까?
도움을 주시면 감사하겠습니다. 감사합니다
편집 :
나는 조인을 필요로하는 이유는
SELECT
ROUND(avg(re.rating), 1)AS avg_rating
, s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
WHERE s.full_name LIKE '%'
AND s.drive = '1'
AND sh.home_id = '3'
AND sh.can_work = '1'
AND sp.position_id = '3'
AND sp.can_work = '1'
GROUP BY staff_id
ORDER BY avg_rating DESC
편집 2
... 그래서 내가 지금 같은 검색 기능을 기반으로 테이블을 조회 할 수있다이 있었다 내 설명의 결과. 또한 MYSQL과 잘 맞지 않아 외래 키를 어떻게 설정할 수 있습니까?
1 SIMPLE UA ALL NULL NULL NULL NULL 14 여분의 임시 사용
ID SELECT_TYPE 테이블 유형이 possible_keys 키있는 key_len 심판 행; 파일롯 사용
1 단순 전체 다시 NULL NULL NULL NULL 50 사용 위치; 조인 버퍼 사용
1 SIMPLE sp ALL NULL NULL NULL NULL 84 where using; 조인 버퍼 사용
1 SIMPLE sh ALL NULL NULL NULL NULL 126 사용 위치; 버퍼
1 SIMPLE의 eq_ref PRIMARY PRIMARY 4 web106 - prestwick.ua.staff_id에게 가입하여 1
편집 3 : 감사 LC, 내 외래 키가 올바르게 설정되지 않은했다. 문제가 해결되었습니다
왜 모든 조인이 필요합니까? select 문은 staff 및 reliability 테이블 만 참조합니다. – OTTA
당신은 당신의 SQL에서 정확히 무엇을 원합니까? 테이블 구조를 제공 할 수 있습니까? 아마도 조인을 줄일 수 있습니다. –
MAX_JOIN_SIZE는 join 문이 반환 할 수있는 레코드 수를 제한하는 MYSQL 설정입니다. 여러 가지 이유로 공유 호스팅 제공 업체가 설정했을 수 있습니다. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_join_size –