2011-09-15 7 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; 

、それは2度目、その上に、313sを取りました48秒を要し、3回目には101秒を要した。 Explain selectから、クエリプランのタイプはrangeです。 key:indexとextra:テーブルPのどこに次のようにタイプします:eq_refとkey:テーブルEのプライマリこのクエリはクエリキャッシュを使用しません。私の質問は次のとおりです:"なぜクエリ時間が劇的に異なるのですか?"

乾杯、 ベン

+0

質問はかなり有効です。しかし、クエリ時間がなぜそれほど大きいのではないかと心配するべきではありませんか? (そしてそれらを小さくする方法)? –

+0

はい、私はそれについても心配していて、誤ったクエリ時間がパフォーマンスにも関連しているのだろうかと思っていました。 –

+0

プロダクションシステムですか?これらのテストと同じ時間に他のクエリが実行されていましたか? –

答えて

1

使用SQL_NO_CACHEクエリをプロファイリング:

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

それはセカンドランにはあまり時間を要した理由クエリの結果は、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

関連する問題