【发布时间】:2013-09-05 15:35:11
【问题描述】:
ORDER BY 让我的查询变慢。
在深入研究 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 Fiddle here。
【问题讨论】:
-
此查询中没有
ORDER BY,是吗? -
一如既往 - 检查解释计划
-
@tadman:不,还没有,但这就是我要处理的地方。现在,我很困惑为什么用 SELECT * 包装查询会改变速度。我的意思是,这是同一个查询!
-
这真的闻起来像糟糕的查询设计,会导致糟糕的查询性能。我敢打赌这是一个非常简单的查询,但是没有样本数据和预期的输出,就不可能理解你想用那个查询做什么。如果您还提供fiddle 我敢打赌这将在几分钟内解决
-
删除内部的 ORDER BY。并考虑一下 CROSS JOIN 是否真的是您想要的。
标签: mysql