1

如果我想使用新的计算列来过滤、聚合和排序数据,任何人都可以告诉哪个查询更有效吗?一种是使用嵌套选择,还是一种在一个选择子句中重复表达式?是否指定了数据库?

查询1:

SELECT count(*), (age - 18) AS newcol FROM qmao_person WHERE (age - 18) > 0 GROUP BY (age - 18) ORDER BY (age - 18) DESC;

查询2:</p>

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;

顺便说一句,问题是哪个查询更有效,而不是如何优化查询。

4

2 回答 2

4

此查询将产生相同的结果并击败两者:

SELECT
    count(*),
    (age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC

但总的来说,对您的问题的回答是非常特定于供应商的。如果供应商使用大量优化——比如分解常用表达式或将子选择转换为连接,则结果很可能是相同的。

也就是说,如果我不能像刚才那样优化它,我仍然更喜欢你的第一个查询。

于 2013-02-08T09:11:21.313 回答
2

您应该看一下这两个查询的执行情况,看看有什么区别。这取决于服务器如何优化它们。示例: 执行计划

于 2013-02-08T09:08:18.520 回答