现在,我的问题是这两个查询是否具有不同的性能特征:
没有
SELECT x + y AS z, t.* FROM t
WHERE
x = 1 and
x+y = 2
HAVING
SELECT x + y AS z, t.* FROM t
WHERE
x = 1
HAVING
z = 2
答案 0 :(得分:1)
是的它应该是不同的 - (1)预计会更快。
确保首先运行主查询然后应用过滤器 - 因此它基本上适用于(查询减去)返回的数据集。
第一个查询应该更好,因为它根本不会选择那些记录。
答案 1 :(得分:1)
HAVING用于包含GROUP BY的查询或返回包含聚合函数结果的单行。例如,SELECT SUM(scores) FROM t HAVING SUM(scores) > 100
返回一行,或者根本不返回任何行。
SQL标准认为第二个查询无效,某些数据库系统不接受该查询。