2011-09-15 3 views
2

내가 5 백만 행의 테이블에서 다음 쿼리를 실행하는 MySQL 버전 5.5.14을 사용하고 있습니다 : 첫 번째 계기로MySQL은 비정상적 쿼리 시간

SELECT P.ID, P.Type, P.Name, P.cty 
    , X(P.latlng) as 'lat', Y(P.latlng) as 'lng' 
    , P.cur, P.ak, P.tn, P.St, P.Tm, P.flA, P.ldA, P.flN 
    , P.lv, P.bd, P.bt, P.nb 
    , P.ak * E.usD as 'usP' 
FROM PIG P 
    INNER JOIN EEL E 
    ON E.cur = P.cur 
WHERE act='1' 
    AND flA >= '1615' 
    AND ldA >= '0' 
    AND yr >= (YEAR(NOW()) - 100) 
    AND lv >= '0' 
    AND bd >= '3' 
    AND bt >= '2' 
    AND nb <= '5' 
    AND cDate >= NOW() 
    AND MBRContains(LineString(Point(-65.6583, -87.8906) 
          , Point(65.6583, 87.8906) 
          ), latlng) 
    AND Type = 'g' 
    AND tn = 'l' 
    AND St + Tm - YEAR(NOW()) >= '30' 
HAVING usP BETWEEN 300/2 AND 300 LIMIT 100; 

, 그것은 두 번째 기회 그것을, 313s했다 48 세를 맞이했으며 세 번째 경우에는 101 세까지 걸렸다. Explain select에서 쿼리 계획의 유형은 range입니다. key : index와 extra : 테이블 P에서 where 다음에 type : eq_ref 및 key : primary를 테이블 E에서 사용합니다.이 쿼리는 쿼리 캐시를 사용하지 않습니다. 제 질문은 : "왜 쿼리 시간이 그렇게 극적으로 다른가요?"

건배, 벤

+0

질문은 꽤 유효합니다. 그러나 쿼리 시간이 왜 그렇게 큰지에 대해 더 걱정하지 않아야합니까? (그리고 그것들을 작게 만드는 방법)? –

+0

그래, 나는 또한 걱정스럽고 불규칙한 쿼리 시간이 성능과 관련이 있는지 궁금해하고있다. –

+0

프로덕션 시스템입니까? 이 테스트와 같은 시간에 다른 쿼리가 실행 되었습니까? –

답변

1

사용 SQL_NO_CACHE 쿼리를 프로파일 링 :

SELECT SQL_NO_CACHE P.ID, P.Type, ... 

는 IT가 두 번째 실행에 더 적은 시간이 걸리는 이유는 쿼리의 결과는 MySQL의 캐시 된 것입니다.

SQL_NO_CACHE는이 쿼리에 대한 캐싱을 비활성화합니다. FLUSH QUERY CACHE을 사용하여 쿼리 캐시를 지울 수 있습니다.

+0

MySQL은 NOW() 함수를 사용하는 쿼리를 캐시하지 않는다. . [link] (http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html) –

+0

나는 나의 상태 변수 qcache_queries_in_cache가 0임을 더 확인했다. –

+1

그럼 시스템의 페이지 캐시 – arnaud576875