sql - '不存在' 和 'not in' ,哪个性能更好?

标签 sql oracle

select objectid
      ,name
      ,address
 from library_t l 
 where not exists (select *
                     from d107 d 
                    where l.objectid = d.objectid
                   )

select objectid
      ,name
      ,address
  from library_t l 
  where l.objectid not in (select objectid 
                             from d107
                          )

如果两个objectid 列都有索引,oracle 中哪个更好?

最佳答案

使用 NOT EXISTS .

执行计划目前可能是相同的,但如果将来任一列更改为 允许 NULL NOT IN 版本需要做更多的工作。

关于 NOT EXISTS 和 NOT IN 需要注意的最重要的一点是,与 EXISTS 和 IN 不同,它们并非在所有情况下都等效。具体来说,当涉及 NULL 时,它们将返回不同的结果。具体来说,当子查询返回一个空值时,NOT IN 将不匹配任何行。

关于sql - '不存在' 和 'not in' ,哪个性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997386/

相关文章:

sql - 复合外键 - 在 Oracle 中可能吗?

python - 为 Python 安装 cx_Oracle

sql - 提取通用函数中两行之间的差异(Oracle 触发器)

mysql - 选择所有大于某个值的列

mysql - WHERE语句查找一个月内的所有记录?

mysql - 用于查找所管理员工数量多于其他主管的员工姓名的 SQL 查询是什么?

mysql - 如何根据一列将此 SQL 查询更改为 "SELECT DISTINCT"?

mysql - 我如何使用 count() 函数编写两个关系表的 mysql 查询来显示所有数据?

sql - Oracle SQL 案例中的数字无效

Oracle数据库,将唯一索引转换为非唯一索引