2013-09-05 82 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