首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL JOIN与IN性能?

SQL JOIN与IN性能?
EN

Stack Overflow用户
提问于 2009-07-29 13:31:27
回答 6查看 172.5K关注 0票数 200

我有一个案例,使用连接或IN将给我正确的结果……哪一种通常具有更好的性能?为什么?这在多大程度上取决于您运行的数据库服务器?(仅供参考,我正在使用MSSQL)

EN

回答 6

Stack Overflow用户

发布于 2009-07-29 21:35:45

有趣的是你提到这一点,我写了一篇关于这个主题的博客文章。

请参阅Oracle vs MySQL vs SQL Server: Aggregation vs Joins

简而言之:你必须测试它,每个数据库都有很大的不同。

票数 27
EN

Stack Overflow用户

发布于 2009-07-29 13:35:03

这很难说-为了真正找出哪一个运行得更好,你需要实际分析执行时间。

作为一般的经验法则,我认为如果你的外键列上有索引,如果你只(或主要)使用内部连接条件,那么连接会稍微快一点。

但是一旦您开始使用OUTER JOIN,或者如果您缺少外键索引,IN可能会更快。

Marc

票数 9
EN

Stack Overflow用户

发布于 2013-02-19 18:55:20

这个主题已经很老了,但仍然经常被提及。就我个人而言,它有点不完整,因为还有另一种方法可以使用EXISTS关键字来询问数据库,我发现它通常更快。

因此,如果您只对表a中的值感兴趣,则可以使用以下查询:

代码语言:javascript
复制
SELECT  a.*
FROM    a
WHERE   EXISTS (
    SELECT  *
    FROM    b
    WHERE   b.col = a.col
    )

如果没有索引col,则差异可能是巨大的,因为db不必找到B中具有相同COL值的所有记录,它只需找到第一个记录。如果b.col上没有索引,而b中有很多记录,那么结果可能是表扫描。对于IN或JOIN,这将是全表扫描,而对于EXISTS,这将只是部分表扫描(直到找到第一个匹配的记录)。

如果b中有许多具有相同col值的记录,那么将所有这些记录读取到临时空间中也会浪费大量内存,只是为了发现您的条件得到了满足。使用exists通常可以避免这种情况。

我经常发现,即使有索引,EXISTS也比IN更快。它取决于数据库系统(优化器)、数据以及所使用的索引类型。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1200295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档