首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我使用复杂的表达式,哪个查询更有效?

问如果我使用复杂的表达式,哪个查询更有效?
EN

Stack Overflow用户
提问于 2013-02-08 17:04:30
回答 2查看 80关注 0票数 1

如果我想使用新的计算列来过滤、聚合和排序数据,谁能告诉我哪个查询更有效?是使用嵌套选择还是在一个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;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-08 17:11:21

此查询将生成相同的结果,并同时击败这两个结果:

代码语言:javascript
复制
SELECT
    count(*),
    (age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC

但一般来说,对你的问题的回答是非常具体的供应商。如果供应商使用繁重的优化,如分解公共表达式或将子选择转换为联接,则结果很可能是相同的。

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

票数 4
EN

Stack Overflow用户

发布于 2013-02-08 17:08:19

您应该看看这两个查询的执行情况,以了解它们之间的差异。这取决于服务器如何优化它们。示例:Execution plan

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14769009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档