这是设置:
.open ':memory:'
CREATE TABLE foos (x INTEGER);
INSERT INTO foos (x)
VALUES (1), (1), (2), (1), (3), (2);
这个查询(让我们称之为query1
)
SELECT x, count(x)
FROM foos
GROUP BY x
HAVING count(x) > 1;
慢于此查询(query2
):
SELECT x, count(x) AS xcnt
FROM foos
GROUP BY x
HAVING xcnt > 1;
换句话说,query1
的{{1}}的返回值是隐式记忆并在count(x)
子句中重用,还是实际上被调用了两次?
以上的输出是
HAVING
修改
将1|3
2|2
1|3
2|2
放在两个查询输出上方:
EXPLAIN QUERY PLAN
答案 0 :(得分:0)
它们是相同的查询。
此外,您应该在x