mysql in or union 和 unionall 的 浅析

1  in 和or 的 区别


 在对where 条件 进行 限定是   都可以使用 in 和or  在 对通一 字段 进行 限定时 永远使用 in    原因如下
in 和or  在  对  含有键的 列  进行 限定时 区别 不大 ,在对非键 列 进行 限定时 若 in 和 or  的 数量 较少时  也没有任何 区别  .但 在 面对  大量的 in 和 or 时候  in的效率不会有太大的下降,但是or会随着记录越多的话性能下降非常厉害
使用 or 的 情况只有 一种  限定的条件  非同一个字段  如  where    id=3  or  name="张三"




2 union 和 or 的 区别


使用 or
select  * from  user  where id =1  or name ="张三"  or  sex=1
如id 为主键 此时 sql 语句 会放弃使用主键 而使用全表查询的 方法 搜索出 符合 上面条件的 结果


如使用 union 
select  * from  user  where id =1 union  all select  * from  user  where  name ="张三"  union  all select  * from  user  where   sex=1
由于 union all   实际相当于  sql 语句 执行了  多次 再将 多次 执行的 结果 生成临时表 返回
所以在 可以 使用键的  情况下  如 id 为主键 mysql 会使用 主键 而不会 类似or  直接放弃 使用键
所以在 可以使用键 单由于or 的 使用放弃使用的情况下  union  all   要比 or  更优秀




3 union   和 union all 的 区别

union 会对的到的结果进行 去重 在返回

相当于默认使用 distinct 效率 自然地下 ,所以除非有  去重 的 必要  , 使用 union all 为佳 .但是可能会出现 数据 重复 取出 导致 数据的 不准确性




以下为  数据库得到的  union 和 or 的实际测试结果







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值