MySQL不稳定的查询时间

时间:2011-09-15 10:22:19

标签: mysql query-optimization

我使用的是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;

第一次,花了313s,第二次花了48s,第三次花了101s。来自explain select,查询计划的类型为:range; key:index和extra:使用表P上的where,然后键入:eq_ref和key:primary on table E.此查询不使用查询缓存。我的问题是:“为什么查询时间如此显着不同?”

干杯, 本

1 个答案:

答案 0 :(得分:1)

在分析查询时使用SQL_NO_CACHE

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

在第二次运行中花费较少时间的原因是MySQL已缓存查询结果。

SQL_NO_CACHE禁用此查询的缓存。您可以使用FLUSH QUERY CACHE清除查询缓存。