Sql 如果使用复杂表达式,哪个查询更有效?

Sql 如果使用复杂表达式,哪个查询更有效?,sql,odbc,Sql,Odbc,如果我想使用新的计算列来过滤、聚合和排序数据,有谁能告诉我哪个查询更有效?是使用嵌套选择还是在一个select子句中复制表达式?是否指定了数据库 问题1: 从qmao_person中选择count*,年龄-18作为新的COL,其中年龄-18>0按年龄分组-18按年龄顺序-18描述 问题2: 从中选择count*,s1.newcol 从qmao_人员s1中选择年龄-18作为新COL 其中,s1.newcol>0按s1.newcol分组,按s1.newcol DESC排序 顺便说一句,问题是哪个查询

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

问题1:

从qmao_person中选择count*,年龄-18作为新的COL,其中年龄-18>0按年龄分组-18按年龄顺序-18描述

问题2:

从中选择count*,s1.newcol 从qmao_人员s1中选择年龄-18作为新COL 其中,s1.newcol>0按s1.newcol分组,按s1.newcol DESC排序


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

您应该查看这两个查询的执行情况,看看它们之间的区别。这取决于服务器如何优化它们。 例子:

您应该看看这两个查询的执行情况,看看它们之间的区别。这取决于服务器如何优化它们。 例子:

此查询将生成相同的结果,并同时满足以下两个条件:

SELECT
    count(*),
    (age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC
但总的来说,您的问题的答案是非常特定于供应商的。 若供应商使用大量优化,比如分解公共表达式或将子选择转换为联接,那个么结果很可能是相同的


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

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

SELECT
    count(*),
    (age - 18) AS newcol
FROM qmao_person
WHERE age > 18
GROUP BY age
ORDER BY age DESC
但总的来说,您的问题的答案是非常特定于供应商的。 若供应商使用大量优化,比如分解公共表达式或将子选择转换为联接,那个么结果很可能是相同的


也就是说,如果我不能像刚才那样优化它,我仍然希望您的第一个查询。

什么数据库平台?您已经为SQLite和TSQL SQL Server或Sybase?对此进行了标记?。但对于这样的问题,一般的答案是,与其问哪一个更有效,不如同时尝试这两种方法,并使用该数据库平台的工具来衡量它们的性能。这样做不仅是一种很好的学习体验,而且可以为您提供更好的答案,因为没有其他人拥有与您完全相同的数据和系统配置。如果您不知道如何度量它们的性能,那么这里肯定会有问题。什么数据库平台?您已经为SQLite和TSQL SQL Server或Sybase?对此进行了标记?。但对于这样的问题,一般的答案是,与其问哪一个更有效,不如同时尝试这两种方法,并使用该数据库平台的工具来衡量它们的性能。这样做不仅是一种很好的学习体验,而且可以为您提供更好的答案,因为没有其他人拥有与您完全相同的数据和系统配置。如果你不知道如何衡量他们的表现,这里肯定会有问题。