我有一个类似的场景;
我有一个名为“tbl_gust_comb_archve_01nov11_beyond
”
在这些字段“Gid
,gip
,siteid
,kw
,kwtype
,dt
,{{1 },gpage
“
和
这是我的疑问:
dated
如果您将日期设为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
等范围,那么结果将需要更长时间,然后是10-30分钟。
如果你有一个日期范围并删除“'2012-01-31' AND '2012-02-01'
”,那么结果将会快得多(大约5分钟)。虽然!删除GROUP BY
后,5分钟也太多了......
表格大小为“30mill record and 12Gig”。
谢谢!
答案 0 :(得分:1)
你应该首先do EXPLAIN
on the query,正如Mark Baker在评论中所说的那样。
但是可能在这些列上创建多列索引应该可以解决问题:
dt
(这可能应该是第一个)confirmation
dated
siteid
gid
我不确定gid
应该如何编入索引(在哪个位置等)。
此处提供了更多详细信息,因此您可以自行决定解决方案:
答案 1 :(得分:0)
如果 siteid 变化不大,您可以尝试删除 siteid 上的索引。 如果你有30毫米。记录和1/3与 siteid ==“bing”,然后您的查询将
这是合乎逻辑的,因为选择范围通常比选择简单值更长。如果 siteid 确实变化很大,您可以尝试在日期&上添加双重索引。 SITEID 。
对于确认字段,由于您位于存档表中,因此您可以将尚未确认的人移动到其他表中。如果您能够取消此检查,您也可以获得一些速度。