MySQL中的非常慢的查询
我有这样一个场景 我有一个表名为“MySQL中的非常慢的查询,mysql,database,optimization,database-performance,Mysql,Database,Optimization,Database Performance,我有这样一个场景 我有一个表名为“tbl\u gust\u comb\u archve\u 0111\u beyond” 在这些字段上设置索引键“Gid,gip,siteid,kw,kwtype,dt,gpage,日期” 及 这是我的疑问: SELECT SQL_CALC_FOUND_ROWS gid, gip, siteid, kw, kwtype, dt, count(id) as vpage, sum(mapped) as mapped FROM tbl_gust_comb_
tbl\u gust\u comb\u archve\u 0111\u beyond
”
在这些字段上设置索引键“Gid
,gip
,siteid
,kw
,kwtype
,dt
,gpage
,日期
”
及
这是我的疑问:
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”和“2012-02-01”,则结果将花费10-30分钟以上的时间
如果您有一个日期范围并删除“分组依据”
,则结果会快得多(大约5分钟)。不过!删除分组依据后,5分钟也太长了
表大小为“30毫米记录和12千兆”
谢谢 如果siteid变化不大,您可以尝试删除siteid上的索引。
如果你有30英镑。用siteid==“bing”记录和1/3,然后您的查询将
抓住那10毫升。记录
随后,在这10个工厂上应用您的日期查找。记录,这可能真的很慢
这是非常合乎逻辑的,因为选择一个范围通常比选择一个简单的值要长。如果siteid变化很大,您可以尝试在dated和siteid上添加双索引
对于确认字段,由于您位于存档表中,可能您可以将尚未确认的人移动到其他表中。如果您能够删除此检查,您还可以获得一些速度。如果siteid变化不大,您可以尝试删除siteid上的索引。
如果你有30英镑。用siteid==“bing”记录和1/3,然后您的查询将
抓住那10毫升。记录
随后,在这10个工厂上应用您的日期查找。记录,这可能真的很慢
这是非常合乎逻辑的,因为选择一个范围通常比选择一个简单的值要长。如果siteid变化很大,您可以尝试在dated和siteid上添加双索引
对于确认字段,由于您位于存档表中,可能您可以将尚未确认的人移动到其他表中。如果你能够删除这张支票,你也可以获得一些速度。你应该首先,正如马克·贝克在评论中所建议的那样
但在这些列上创建多列索引可能会解决问题:
dt
(这可能是第一次)
确认
日期
siteid
gid
我不确定应该如何索引gid
(在哪个位置等)
此处提供了更多详细信息,因此您可以自行决定解决方案:
- ,
- ,
- ,
- ,
正如马克·贝克(Mark Baker)在评论中所建议的那样,你应该首先这样做
但在这些列上创建多列索引可能会解决问题:
dt
(这可能是第一次)
确认
日期
siteid
gid
我不确定应该如何索引gid
(在哪个位置等)
此处提供了更多详细信息,因此您可以自行决定解决方案:
- ,
- ,
- ,
- ,
您是否尝试过使用EXPLAIN运行这些查询?在这种情况下,这应该是您的第一步。您是否尝试过使用EXPLAIN运行这些查询?这应该是你在这种情况下的第一步