MySQL不稳定的查询时间

MySQL不稳定的查询时间,mysql,query-optimization,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

我使用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;
选择P.ID、P.Type、P.Name、P.cty
,X(P.latlng)表示“lat”,Y(P.latlng)表示“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.usP美元
来自猪P
内接鳗鱼
在E.cur=P.cur上
第一幕在哪里
佛罗里达州>='1615'
和ldA>=“0”
年>=(年(现在())-100)
和lv>='0'
和bd>='3'
和bt>='2'
和nb=NOW()
和(线串(点(-65.6583,-87.8906)
,点(65.6583,87.8906)
),latlng)
和类型='g'
和tn='l'
而St+Tm年(现在())>='30'
usP介于300/2和300限值100之间;
第一次需要313秒,第二次需要48秒,第三次需要101秒。从解释选择中,查询计划的类型为:范围;key:index和extra:在表P上使用where,然后在表E上使用type:eq_ref和key:primary。此查询不使用查询缓存。我的问题是:“为什么查询时间如此显著不同?”

干杯, Ben

分析查询时使用:

SELECT SQL_NO_CACHE P.ID, P.Type, ...
第二次运行所需时间较少的原因是MySQL缓存了查询结果


SQL\u NO\u缓存禁用此查询的缓存。您可以使用
FLUSH query cache

清除查询缓存。MySQL不缓存涉及使用NOW()函数的查询。[链接]()我进一步确认我的状态变量qcache_querys_in_cache为0。那么它可能是系统的页面缓存。如何检查系统的页面缓存?我一直在监视我的CPU、内存和交换历史记录。内存和交换上没有可见的尖峰。当查询时间快时CPU会出现峰值,而当查询时间慢时CPU不会出现峰值。我试过了,查询时间确实变长了。似乎系统的页面缓存正在工作。这个问题很有道理。但是你不应该更关心为什么查询时间如此之大吗?(以及如何使它们变小)?是的,我也担心这一点,并想知道不稳定的查询时间是否也与性能有关。它是生产系统吗?是否有其他查询与这些测试同时运行?我对第四次试验56s、第五次试验2s、第六次试验2s的查询时间。太神了因为我的查询中有一个NOw()函数,所以不涉及缓存。这是一个测试设置。除此之外,没有其他正在运行的查询。