【发布时间】:2015-04-05 09:20:07
【问题描述】:
我正在使用 PostgreSql 9。我有一个简单的问题。 哪个查询效率更高?
SELECT users_sessions.session_id, users_sessions.series
FROM users_sessions
WHERE users_sessions.user_id = 8
AND users_sessions.session_id IN (
SELECT session_id
FROM sessions_history
GROUP BY sessions_history.session_id
HAVING SUM(CASE WHEN sessions_history.action = 2 THEN 1 END) = 0
)
VS.
SELECT US8.session_id,Us8.series
FROM
( SELECT us.session_id as S_ID, us.series
FROM users_sessions as US
WHERE US.user_id = 8 ) AS US8
INNER JOIN
(SELECT SH.session_id as SH_ID
FROM session_history as SH
WHERE SH.action <> 2) AS SH2
ON US8.session_id = SH2.session_id
【问题讨论】:
-
查看
explain (analyze, verbose)的输出 -
嗯,你试过了吗?第二个甚至似乎都无效。测试它们,写下所有结果,然后问一个好问题。
-
您的 Postgres 版本? “9”不是有效版本。 “9.2”或“9.3”是...
-
我认为第二个查询不好。
-
@KamilJ - 纯粹评论欧文的观点;正确的语法是
HAVING SUM(1) = 0(从 HAVING 子句中的 SELECT 子句重复逻辑) 或者如果您不想重复自己;SELECT * FROM (<your query, without a HAVING clause>) AS aggregate WHERE s = 0.
标签: sql database postgresql query-optimization