sql - 优化 not in to left outer join

标签 sql ruby-on-rails postgresql

我想获取用户未见过的前 10 个问题。 为此,我需要将该用户看到的问题存储到一个名为 user_questions 的表中

所以,我现在的查询是:

SELECT * from questions WHERE questions.id NOT IN (select question_id from user_questions where user_id=1) 限制 0、10

据我了解,与类似的连接查询相比,此查询应该更慢。我如何构建产生相同结果的连接查询?

最佳答案

等效的连接查询是:

select q.*
from questions q left outer join
     user_questions uq
     on uq.question_id = q.id and
        uq.user_id = 1
where uq.user_id is null
limit 0, 30

但请注意,结果不会随机排列。通常使用 limit 子句,您还可以指定 order by

关于sql - 优化 not in to left outer join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688171/

相关文章:

hibernate - 超出非 super 用户的 PostgreSQL 连接限制

c# - Scaffold-DbContext SQL View ? ASP 网络核心 3.1

PHP/HTML - 表格无法正确显示

ruby-on-rails - 仅用于 [POST] 的默认路由 - Ruby on Rails 3.2

python - 了解我更改的一些 postgresql.conf 设置

arrays - Postgres 比较数组的最快方法

MySQL:传递给具有多列和行的PROCEDURE查询结果

mysql - 删除两个表中的行时的效率

ruby-on-rails - Heroku 上的 Active Admin 无法正常工作

ruby-on-rails - 如何使用 RSpec 测试 Gibbon?