[英]MySQL Erratic Query Times
我正在使用MySQL版本5.5.14從500萬行的表中運行以下查詢:
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;
第一次是313秒,第二次是48秒,第三次是101秒。 根據說明選擇,查詢計划的類型為:范圍; 鍵:索引和額外:在表P上使用where,然后鍵入:eq_ref和鍵:在表E上使用primary。此查詢不使用查詢緩存。 我的問題是: “為什么查詢時間如此顯着不同?”
干杯本
在分析查詢時使用SQL_NO_CACHE
:
SELECT SQL_NO_CACHE P.ID, P.Type, ...
在第二次運行中花費較少時間的原因是查詢的結果已由MySQL緩存。
SQL_NO_CACHE禁用此查詢的緩存。 您可以使用FLUSH QUERY CACHE
清除查詢緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.