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 的实际测试结果
在对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 的实际测试结果
相关文章推荐
- 版本控制软件Microsoft Visual Souce Safe6.0使用浅析
- 浅析ANSI-C语言中的中断处理(如有疑问,敬请留言)
- Netty实现原理浅析
- 【浅析】JAVA内部类的实现及反编译解析
- XMind浅析——NBA新赛季几大看点
- Win32 临界区实现原理浅析
- 浅析http协议、cookies和session机制、浏览器缓存
- Node.js 异步模式浅析
- Protocol Buffers 浅析
- 常见的单例模式之饱汉模式+饥汉模式浅析
- ASP.NET 中 Session 实现原理浅析 [2] 状态管理器
- javascript拖拽浅析
- Robotium中调用getActivity()方法导致程序挂起的研究浅析
- 深入浅析python继承问题
- 浅析强化学习及使用Policy Network实现自动化控制
- 浅析JAVA实现网页取内容
- zz 浅析人脸检测之Haar分类器方法
- ASP.net处理XML数据实例浅析
- C语言预定义宏(__LINE__、__DATE__等)浅析
- 【深入浅出jQuery】源码浅析--整体架构