您的位置:首页 > 数据库 > MySQL

mysql in or union 和 unionall 的 浅析

2016-12-12 17:22 381 查看
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 的实际测试结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: