sql - 哪个查询效率更高?内部联接与子查询?总计与有

标签 sql database postgresql query-optimization

我正在使用 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
) 

对比

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 

最佳答案

另一种解决方案使用 NOT EXISTS,这是对您似乎要问的内容的精确翻译:

给我不存在操作 2 的 session :

SELECT session_id, series 
FROM users_sessions as us
WHERE users_sessions.user_id = 8 
AND NOT EXISTS
 (  SELECT * 
    FROM sessions_history as sh
    WHERE action = 2
    AND us.session_id = sh.session_id 
 ) 

关于sql - 哪个查询效率更高?内部联接与子查询?总计与有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455843/

相关文章:

php:我想要每1分钟执行一次代码

mysql - 将第三个表链接到多对多关联中的桥接表

mysql - sql外键的使用方法

ruby-on-rails - postgres 没有用户或角色,无法创建但可以使用 rails?

postgresql - 当我在命令行中键入 psql 时,我在登录什么?

sql - 如何在 PostgreSQL 中对整数数组进行过滤和求和

c# - 插入/更新大量记录 SQL Server

sql - PostgreSQL 将数据聚合成单行

php - 搜索数据库的用户界面

sql - 链接两个不同数据源服务器上未链接的两个表