2013-09-05 122 views
-1

ORDER BY會將我的查詢放慢抓取速度。MySQL使用SELECT *包裝查詢很慢

在通過StackOverflow嘗試解決此問題時,我發現有幾個references用'SELECT *'來包裝查詢。由於某些深不可測的原因,這也會使我的查詢變慢。

我不明白如何用這種方式包裝我的查詢應該有任何效果。 SELECT * FROM(QUERY)不應與QUERY相同嗎?

這是我的查詢:

SELECT W.NDB_No, Seq, Gm_Wgt*Nutr_Val/100 
    FROM WEIGHT AS W, 
    (SELECT NDB_No, Nutr_No FROM FOOD_DES, NUT ORDER BY nutrEnum) AS A 
    LEFT JOIN 
    NUT_DATA AS B 
    ON A.NDB_No = B.NDB_No AND A.Nutr_No = B.Nutr_No; 

它需要0.8秒。用SELECT * FROM (...) AS X包裝此查詢會極大地降低查詢速度。這裏發生了什麼?此外,任何幫助獲得ORDER BY的工作將不勝感激(可能是一個相關的問題)。請參閱SQL小提琴here

+1

有沒有'ORDER BY'在此查詢,是嗎? – tadman

+6

一如既往 - 檢查解釋計劃 – Randy

+0

@tadman:不,還沒有,但這就是我要去的地方。現在,我很困惑爲什麼用SELECT *包裝查詢會改變速度。我的意思是,這是同一個查詢! – ishmael

回答

0

這似乎是同樣的結果雖然在順序稍有不同(因爲是在指定的順序要求)http://sqlfiddle.com/#!2/69972/7

+0

謝謝,草莓。這看起來很有希望,但添加ORDER BY時它仍然非常慢。也許有些索引不見了? – ishmael

+0

Nut_data缺少一個PK,並且重量看起來是其所需鍵數的4倍--PK應該足夠了。除此之外,我們仍然有CROSS JOIN,這對於性能來說不是很好。 – Strawberry