1 in 和or 的 区别
in 和or 在 对 含有键的 列 进行 限定时 区别 不大 ,在对非键 列 进行 限定时 若 in 和 or 的 数量 较少时 也没有任何 区别 .但 在 面对 大量的 in 和 or 时候 in的效率不会有太大的下降,但是or会随着记录越多的话性能下降非常厉害
使用 or 的 情况只有 一种 限定的条件 非同一个字段 如 where id=3 or name="张三"
2 union 和 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 更优秀
union 会对的到的结果进行 去重 在返回
相当于默认使用 distinct 效率 自然地下 ,所以除非有 去重 的 必要 , 使用 union all 为佳 .但是可能会出现 数据 重复 取出 导致 数据的 不准确性
以下为 数据库得到的 union 和 or 的实际测试结果