美文网首页
EXISTS 和 IN 的效率比较

EXISTS 和 IN 的效率比较

作者: 軍_ | 来源:发表于2017-02-22 09:50 被阅读21次

    EXISTS 和 IN

    IN 是把外表和内表作hash连接,而 EXISTS 是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为 EXISTSIN 的效率高的说法是不准确。如果查询的两个表大小(数据量)相当,EXISTSIN 的效率差别不大

    如果两个表中,其中一个表大(A表),另一个表较小(B表),则子查询表大的用 EXISTS,子查询表小的用 IN

    例如:

    SELECT * FROM B WHERE cc IN (SELECT cc FROM A)
    

    效率低,用到了B表上的索引。

    SELECT * FROM B WHERE cc EXISTS (SELECT cc FROM A WHERE cc=B.cc)
    

    效率高,用到了A表上cc列的索引

    NOT EXISTS 和 NOT IN

    如果查询语句使用了 NOT IN 那么内外表都进行全表扫描,没有用到索引;
    NOT EXISTS 的子查询依然能用到表上的索引。所以无论那个表大,用 NOT EXISTS 都比 NOT IN 要快。

    相关文章

      网友评论

          本文标题:EXISTS 和 IN 的效率比较

          本文链接:https://www.haomeiwen.com/subject/mdvpwttx.html