簡體   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