2016-06-28 3 views
0

웹 시스템이 aws로 마이그레이션되고 대부분의 영역이 정상적인 것처럼 보입니다. aws 측면에서 매우 느린 웹 시스템에서 하나의 특정 클릭이 있습니다. 나는 이전 시스템과 비교하기 위해 실행되는 mysql 쿼리를 찾을 수 있었고 모든 것이 동일하다. 인덱스도 마찬가지였다.다른 속도로 실행되는 MySQL 쿼리

select distinct cf_1274 from vtiger_cf_1274 
inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_cf_1274.picklist_valueid 
where roleid in ("H3","H4","H5","H51","H50","H49","H2") and picklistid in (select picklistid from vtiger_cf_1274) 
order by sortid asc 

내가 둘 사이에 볼 수있는 유일한 차이점은 기존의 MySQL 서버 버전은 5.0.95이다이고 최신 버전은 내가도를 실행 할 수 있었다 5.6.X

입니다 아래 쿼리는 둘 다에 설명하고 이것이 내가 차이점을 보았던 곳이다. 새로운 시스템은 몇 가지 "Join Buffer 사용 (Block Nested Loop)"을 Explain 질의의 추가 열에서 사용 했었습니다. 임이 이슈가되어야한다고 생각하지만, 어떻게 접근해야할지 모르겠습니다.

+0

질문을 잊어 버렸을 것입니다. – Ibu

+0

왜'and picklistid in (picklistid from vtiger_cf_1274 선택)'이 필요합니까? 항상 사실이 아닌가? – Fabricator

+0

블록 중첩 루프는 RDS 매개 변수 그룹의 매개 변수 중 하나 였으므로 종료되었습니다. 이것은 속도 문제를 해결했습니다. 문제는 MySQL 서버 5.0.X 대 5.6.X에 설정된 다른 기본값이 있다는 것입니다. – Monzingo

답변

0

쿼리가 어떤 테이블에서 오는 것인지를 한정하지는 않습니다. 최소한 여기에서 시작한 것처럼 ALIAS를 쿼리에 적용해야합니다.

vtiger_cf_1274 테이블이 포함 된 선택 목록 테이블에 선택 목록 값으로 참여하고 있습니다. 따라서 선택 목록 값과 선택 목록 ID를 모두 조인하지 마십시오. 이렇게하면 IN (select) 한정자를 제거 할 수 있습니다.

또한, 나는 그 새로운 기준을 결합되고, 내가 확인 도움이 될이 테이블의 샘플 데이터 컨텍스트를 표시 ...

기준을 최적화 할 수있는 (picklistvalueid, picklistid)에 색인 역할 선택 목록 테이블을 것이다/귀하의 질의를 단순화/해결하십시오.

select distinct 
     cf_1274 
    from 
     vtiger_cf_1274 VT 
     inner join vtiger_role2picklist PL 
      on VT.picklist_valueid = PL.picklistvalueid 
      AND VT.picklistid = PL.picklistID ??? 
    where 
      roleid in ("H3","H4","H5","H51","H50","H49","H2") 
    order by 
     sortid asc 
관련 문제