2014-06-17 1 views
1

완료하려면 11 초가 걸리는 Cloud SQL 인스턴스 (유형 : D1 mysql 5.6.16)에서 다음 쿼리를 실행하고 있습니다. 내 공유 호스팅 (사양면에서 특별한 것은 없음)에서 mysql (v5.5.35)에서 실행되는 것과 동일한 색인 및 내용을 가진 동일한 데이터베이스에서 쿼리는 단지 0.068 초 밖에 걸리지 않습니다.Cloud SQL 및 로컬 서버에서 중요한 쿼리 시간 차이

검색어 :

SELECT casenotes.caseworkerID,COUNT(*) 
FROM emails LEFT JOIN (casenotes) ON (emails.ID=casenotes.subtypeID) 
WHERE emails.type='sent' AND casenotes.type='email' AND 
     emails.datetime > '2014-05-01' 
GROUP BY casenotes.caseworkerID; 

이 클라우드 SQL 서버의 설명 결과가

 
id select_type table type possible_keys key key_len ref rows Extra 
1 SIMPLE casenotes ref type,subtypeID,caseworkerID type 22 const 6447 Using index condition; Using where; Using temporary; Using filesort 
1 SIMPLE emails eq_ref PRIMARY,ID,type,datetime PRIMARY 8 casework_test.casenotes.subtypeID 1 Using where 

이는 내가합니까

 
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE casenotes ref type,subtypeID type 22 const 6451 Using where; Using temporary; Using filesort 1 SIMPLE emails eq_ref PRIMARY,type,datetime PRIMARY 8 zahawizs_caseworker.casenotes.subtypeID 1 Using where

를 공유 호스팅에 대한 결과를 설명입니다 누구든지 어떤 su를 가졌다. 이 select 문이나 Cloud SQL 서버 인스턴스를 조정하여 더 빨리 반환 할 수있는 방법에 대해 설명합니다.

답변

1

문제가있는 사람은 누구나 문제의 테이블이 MyISAM에 있다는 것을 발견했습니다. INnodb에 체인을 연결하면 검색 속도가 빨라졌습니다. 분명히 클라우드 SQL 캐시는 InnoDB 테이블에 더 적합하다.

대용량 데이터 세트의 경우 클라우드 SQL을 완료하는 데 약 3 초가 걸리지 만 100 % 솔루션이 아니기 때문에 다른 제안 사항도 많이 감사 할 것입니다.

+0

예, MyISAM을 사용하지 마십시오. InnoDB는 트랜잭션 지원을 제공하며 자체 메모리 관리 기능을 제공합니다. Cloud SQL은 InnoDB에 최적화되어있다. 또한 filesort를 사용하는 쿼리는 Cloud SQL에서 현재 느립니다. 따라서 최상의 성능을 위해서는이를 피하십시오. –

+0

해당 쿼리로 파일 정렬을 피하는 방법이나 다른 방법을 사용하는 방법에 대한 제안 – SimonSmethMac

+0

GROUP BY를 제거하면 파일 세트가 사라지나요? –