繁体   English   中英

MySQL中查询非常慢

[英]Very Slow Query in MySQL

我有一个类似的场景;

我有一个名为“ tbl_gust_comb_archve_01nov11_beyond ”的表

索引键在这些字段设置“ Gidgipsiteidkwkwtypedtgpagedated

这是我的查询:

SELECT SQL_CALC_FOUND_ROWS 
  gid, gip, siteid, kw, kwtype, dt, count(id) as vpage, sum(mapped) as mapped 
FROM 
  tbl_gust_comb_archve_01nov11_beyond 
WHERE 
  confirmation = 1 
AND 
  dated BETWEEN '2012-01-31' AND '2012-01-31' 
AND 
  siteid = 'bing' 
GROUP BY gid 
ORDER BY dt 
DESC LIMIT 0,50

如果您将日期设为'2012-01-31' AND '2012-02-01'则结果将花费10-30分钟以上的时间。

如果您有日期范围,并删除“ GROUP BY ”,则结果会快得多(约5分钟)。 虽然! 删除GROUP BY ,5分钟也太多了...

表大小为“ 30mill记录和12Gig”。

谢谢!

你应该首先EXPLAIN的查询 ,如马克·贝克他的评论中提出。

但是可能在这些列上创建多列索引应该可以解决此问题:

  • dt (可能应该是第一个)
  • confirmation
  • dated
  • siteid
  • gid

我不确定应该如何索引gid (在哪个位置等)。

此处有更多详细信息,因此您可以自行决定解决方案:

如果siteid相差不大,则可以尝试删除siteid上的索引。 如果您有30mill。 记录,并使用siteid ==“ bing” 1/3,那么您的查询将

  1. 抓住那些10mill。 记录
  2. 之后,在这10个工厂上应用您的日期查找。 记录,这可能真的很慢。

这是很合乎逻辑的,因为选择范围通常比选择简单值长。 如果SITEID确实有很大的差异,你可以尝试在这两个日期SITEID添加双指数。

对于确认字段,由于您位于存档表中,因此您可以将那些尚未确认的对象移到另一个表中。 如果您能够删除此支票,则也可以提高速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM