2012-09-27 62 views
0

奧凱傢伙,下面已被竊聽我整天:基於現場MySQL的選擇加入條款掃描行數太多

我用下面的查詢選擇的產品和價格,包括最新的結果,價格的概述StartTime從另一個表(tresults)。爲了做到這一點,我認爲我需要在連接中使用子選擇。

問題是EXPLAIN函數告訴我MySQL正在掃描所有不使用任何索引的結果行(225000行)。

有什麼方法可以加快速度?最好通過添加一個WHERE語句讓mysql僅查看具有相應pID的行。

select p.pID, brandname, description, p.EAN, RetailPrice, LowestPrice, min(price), min(price)/lowestprice-1 as afwijking 
from tproducts p 
    join ( 
    select Max(tresults.StartTime) AS maxstarttime, tresults.pID 
    from tresults 
    -- maybe adding a where clause here? 
    group by tresults.pID 
    ) p_max on (p_max.pID = p.pID) 
join tresults res on (res.starttime = p_max.maxstarttime and p.pID = res.pID and res.websiteID = 1) 
join tsupplierproducts sp on (sp.pID = p.pID AND supplierID = 1) 
join tbrands b on (b.brandID = p.BrandID) 
group by p.pID, brandname, description, p.EAN, RetailPrice, LowestPrice 

索引位於所有屬於連接或where子句一部分的列上。

任何幫助,將不勝感激。謝謝!

+0

您可以加入哪些指標上的表格中設置一些信息?例如,tresults.StartTime列中是否有索引集? – Johan

+0

我已經添加了一行。幾乎所有在連接或子句索引的地方。問題的根源在於加入(select ...)部分 – kay10

回答

0

從你的SQL我假設你只列出了基於1供應商(supplierID = 1)的產品。

最好的做法是,你的已知過濾器在sql的開頭以消除記錄,然後使用內部連接加入其他沒有過濾器表的表。

select p.pID, brandname, description, p.EAN, RetailPrice, LowestPrice, min(price), min(price)/lowestprice-1 as afwijking 
from 
(select p.pID, p.BrandID p.EAN, Max(t.StartTime) AS maxstarttime 
FROM tproducts p INNER JOIN tresults t on supplierID=1 and p.pID=t.pID 
group by tresults.pID 
) p 
inner join tresults res on (res.websiteID = 1 and p.pID = res.pID and res.starttime = p_max.maxstarttime) 
inner join tsupplierproducts sp on (sp.pID = p.pID) 
inner join tbrands b on (b.brandID = p.BrandID) 
group by p.pID, brandname, description, p.EAN, RetailPrice, LowestPrice 

從上面的代碼中,我消除所有的供應商ID!= 1從tproducts之前加入tresults。

讓我知道如果上面的SQL的幫助,以及什麼是EXPLAIN功能結果

:-)

+0

謝謝。我淘汰了所有不屬於supplierID = 1的產品。由於supplierID不在結果表中,也沒有在產品表中,因此我採用了稍微不同的方式。速度稍微好一點,但不是很多。最有可能的原因是幾乎所有的產品都來自supplierID = 1。 – kay10

+0

將此添加到where子句幫助了很多:tresults.StartTime在DATE_SUB(NOW(),INTERVAL 7 DAY)和NOW()之間。我這樣做是因爲maxdate可能在過去7天內。但是必須有更好的方式......我想 – kay10