[英]Very Slow Query in MySQL
我有一個類似的場景;
我有一個名為“ tbl_gust_comb_archve_01nov11_beyond
”的表
索引鍵在這些字段設置“ Gid
, gip
, siteid
, kw
, kwtype
, dt
, 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
如果您將日期設為'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,那么您的查詢將
這是很合乎邏輯的,因為選擇范圍通常比選擇簡單值長。 如果SITEID確實有很大的差異,你可以嘗試在這兩個日期和SITEID添加雙指數。
對於確認字段,由於您位於存檔表中,因此您可以將那些尚未確認的對象移到另一個表中。 如果您能夠刪除此支票,則也可以提高速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.