zoukankan      html  css  js  c++  java
  • in 和 exists的性能区别

    子查询结果集记录较少,主查询中的表较大且又有索引时应该用in,

    反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。

    以驱动表的快速返回为目标,驱动顺序的改变是性能变化的关键,

    如果是exists,那么以外层表为驱动表,先被访问,

    如果是IN,先执行子查询

    IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

    比较使用 EXISTS 和 IN 的查询

    本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:

    USE pubs
    GO
    SELECT title
    FROM titles
    WHERE EXISTS
    (SELECT *
    FROM publishers
    WHERE pub_id = titles.pub_id
    AND city LIKE 'B%')
    GO
    -- Or, using IN:
    USE pubs
    GO
    SELECT title
    FROM titles
    WHERE pub_id IN
    (SELECT pub_id
    FROM publishers
    WHERE city LIKE 'B%')
    GO
    
    
    补充部分[来自JavaEye]:
    关键字: in与exists和inner join执行效率 
    in数据量少效率还可以,数据量大就效率低 
    exists的效率依赖于匹配度。
    inner join效率比较稳定。
  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/ding0910/p/1428203.html
Copyright © 2011-2022 走看看