zoukankan      html  css  js  c++  java
  • MySQL中 in和exists的区别


    A表: 100条数据 , B: 10条数据

    select * from A where id in ( select aid from B )

    先执行括号里面的查询,然后执行外面,总共需要查询的次数的 B+1=11次
    需要注意的是 括号里面的查询会缓存到内存中


    select * from A where exists ( select aid from B where aid=A.id )

    先执行括号外面的查询,然后拿到外面的查询结果去执行括号里面的查询
    总共查询的次数是 1+A=101次


    得出的结论: 如果子查询数量少,用in,子查询数量达用 exists,也可以理解为先查询小的那个

    这个结论也不是绝对的,还要考虑索引之类的优化,比如A小于B,按照上面的理论应该使用 exists,但是如果B有索引A没有索引呢?
    可能结果就不一样了

  • 相关阅读:
    poj_2352树状数组
    poj_2187凸包,暴力解法
    zoj_3735,dp,长沙站j题
    hdu_1698线段树成段更新
    poj_2828线段树,逆序插入
    poj_3371
    poj_3071概率dp
    hdu_2191多重背包
    poj_1185状压dp
    css-margin
  • 原文地址:https://www.cnblogs.com/codeAB/p/10066508.html
Copyright © 2011-2022 走看看