or和union区别
SQL 中 or 和union的区别:
UNION在进⾏表链接后会筛选掉重复的记录,所以在表链接后会对所产⽣的结果集进⾏排序运算,删除重复的记录再返回结果。实际⼤部分应⽤中是不会产⽣重复的记录,最常见的是过程表与历史表UNION。如:
select * from users1 union select * from user2
这个SQL在运⾏时先取出两个表的结果,再⽤排序空间进⾏排序删除重复的记录,最后返回结果集,如果表数据量⼤的话可能会导致⽤磁盘进⾏排序。
or是把符合两个条件的都查询出来取并集,不会去掉相同的记录。
select * from user1 where q = '1' or q='2'
就是把q = '1'和 q='2 的所有结果都返回,不去重的。
sql中union多表合并总结⼀下就是union会删除重复的记录,or不会去掉重复的记录,⼆者都是对结果集的合并。
另外⼀篇⽂章中提到where⼦句中使⽤or会引起全表扫描,⼀般的⽤union来代替or。事实证明,这种说法对于⼤部分都是适⽤的
看来,⽤union在通常情况下⽐⽤or的效率要⾼的多。但是如果or两边的查询列是⼀样的话,那么⽤union反倒和⽤or的执⾏速度差很多,虽然这⾥union扫描的是索引,⽽or扫描的是全表。
后来⼜思考了⼀下or和in的区别,or 是或者 两个条件满⾜⼀个就可以。in ⽤在于包含 (⼀段语句或者⼏个值 ),还有说in是把⽗查询源表和⼦查询表作hash连接。or是对⽗查询表作loop循环,每次loop循环再对⼦查询表进⾏查询。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。