标题:mysql 学习第10天 exist用户和where in的区别
-------------------------------------------------------------------------------------------------------------------------------
时间:2012/4/26 18:08:17
-------------------------------------------------------------------------------------------------------------------------------
内容:
有一个表1 叫TA 记录汶川地震时候捐款信息放着捐款人民和金额和名字
name | donate |
stephen |
100 |
hou | 200 |
zhang | 200 |
zheng | 200 |
xiao | 200 |
name | donate |
xiao |
100 |
hou | 200 |
zhu | 200 |
ben | 200 |
wu | 200 |
现在我需要知道在玉树地震捐款的名单中 谁在汶川地址的时候已经捐过了
可以用where in来做
select * from TB where name in (select name from TA),
where in执行方法是先做内查询的 得到零时表的结果集
然后对tb表中每一户数据进行判断 是否在这个结果集中
那么计算方法是加入a表有a行 b表有b行 计算量是
1,取出经过筛选的a行数据----2,对b行的每一行数据在a行数据中对比 找到就复合条件 比较A*B次 就得到结果
总的计算量是 读取(A)次+比较(A*B)次
也可以用 exists 做
select * from TB where exists (select 1 from TA TB.name=TA.name)
exists执行方法是 取出外表的每行数据 代入到 内部中进行比较, 如果存在 就得到结算
那么我门来算下这种方法的计算量
读取B行+ 比较(A*B)次
那么很明显 如果a比较小的时候 用in 也就是说先计算的表比较小时候用in
如果b小的时候用exists 也是读取小表用
那么简单了 什么时候用exists 什么使用用in呢
当我手上拿着一张小表 我要去大表里找小表中重复的数据我用exsit
如果手上是大表 我要小表中找重复的数据我用in