2017-12-27 2 views
-1

4 개의 테이블이있는 mysql db가 독립적으로 업데이트됩니다. 2 개의 표는 주어진 시간 (bhMacAcct 및 sv)에서 대략 25k ~ 35k 행을 갖습니다. 각 테이블의 다양한 비트에 참여해야합니다. 이 쿼리를 사용하는 경우MySQL의 긴 쿼리 시간

SELECT bhMacAcct.acct,pkg,sv.mac,sv.recData 
FROM bhMacAcct,bhPkgAcct,sv 
WHERE (bhMacAcct.acct = bhPkgAcct.acct) AND (bhMacAcct.mac = sv.mac); 

이 3 ~ 5 분 정도 소요 :

내가에 착륙 결국 쿼리입니다. 가능성이 더 쉬운 방법이 있을까요? 이것이 속도를 위해 더 최적화 될 수 있습니까?

답변

2

첫째, 항상 적절한 명시 적 JOIN 구문을 사용하여 모든 열 이름을 자격 :

SELECT ma.acct, pkg, sv.mac, sv.recData 
FROM bhMacAcct ma JOIN 
    bhPkgAcct pa 
    ON ma.acct = pa.acct JOIN 
    sv 
    ON ma.mac = sv.mac; 

를이 쿼리의 경우, 조인에 사용되는 모든 컬럼에 인덱스로 시작합니다. 추천 대상 : bhMacAcct(acct, mac), bhPkgAcct(acct)sv(mac, recData)입니다. 또한 색인이 검색어를 포함하도록 pkg을 적절한 색인에 넣습니다.