如果我想使用新的计算列来过滤、聚合和排序数据,谁能告诉我哪个查询更有效?是使用嵌套选择还是在一个select子句中重复表达式?是否指定了数据库?
Query1:
SELECT count(*), (age - 18) AS newcol FROM qmao_person WHERE (age - 18) > 0 GROUP BY (age - 18) ORDER BY (age - 18) DESC;
Query2:
SELECT count(*), s1.newcol FROM (SELECT (age - 18) AS newcol FROM qmao_person) s1 WHERE s1.newcol > 0 GROUP BY s1.newcol ORDER BY s1.newcol DESC;
顺便说一句,问题是哪个查询会更有效,而不是如何优化查询。
发布于 2013-02-08 17:11:21
此查询将生成相同的结果,并同时击败这两个结果:
SELECT
count(*),
(age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC但一般来说,对你的问题的回答是非常具体的供应商。如果供应商使用繁重的优化,如分解公共表达式或将子选择转换为联接,则结果很可能是相同的。
也就是说,如果我不能像刚才那样优化它,我仍然更喜欢你的第一个查询。
发布于 2013-02-08 17:08:19
您应该看看这两个查询的执行情况,以了解它们之间的差异。这取决于服务器如何优化它们。示例:Execution plan
https://stackoverflow.com/questions/14769009
复制相似问题