union 用于合并两个或多个查询结果,这些查询结果必须具备相同的列结构、相同的列顺序。
union:
select column_names from tablename
union
select column_names from tablename
union all:
select column_names from tablename
union all
select column_names from tablename
union与union all的区别在于UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
SQL在运行时先取出两个表的结果,再用排序空间进行排序并会掉删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而union all只是简单的将两个结果合并后就返回,这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,union all比union会快很多,如果确定两个表中不包含重复数据的话就用union all。
有些时候会不可避免的用到in与or进行查询。但使用时需要注意使用in或or查询会进行数据遍历,会影响查询效率。
SQL:
SELECT * FROM article WHERE article_category=11 ORDER BY article_id DESC LIMIT 5
优化此sql效率,建立索引:
create index idx_u on article (article_category,article_id);
in:
SELECT * FROM article WHERE article_category IN (2,3) ORDER BY article_id DESC LIMIT 5
or:
select * from article where article_category=2 or article_category=3 order by article_id desc limit 5
此时已经做了列索引但查询效率依旧不高。
union all:
(select * from article where article_category=2 order by article_id desc limit 5)
UNION ALL (select * from article where article_category=3 order by article_id desc limit 5)
ORDER BY article_id desc
limit 5
1.对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。
2.对于只有非索引字段来说你就老老实实的用or 或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数。
分享到:
相关推荐
主要介绍了MySQL中使用or、in与union all在查询命令下的效率对比,论证了在通常情况下union all并不一定比or及in更快,需要的朋友可以参考下
一:union all 肯定是能够命中索引的 二:简单的in能够命中索引 三:对于or,新版的MySQL能够命中索引 四、对于!=,负向查询肯定不能命中索引 五、其他方案
MSSQL用union查询爆数据.txt
本文整理自:stackoverflow ...where company IN ('bbc', 'itv'); 在这个查询中MySQL会使用company上的索引。不需要改成UNION。 更棘手的情况是,OR条件涉及两个不同的列。 select username from users where c
(4)查询被0602001学生或0602002学生所选修的课程的课程号(用UNION组合查询与IN条件查询两种方法实现) (5)查询0602001学生和0602002学生同时选修的课程的课程号(用INTERSECT组合查询与EXISTS嵌套子查询两种方法...
主要给大家介绍了关于MySQL中or、in、union与索引优化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
SQL语句 UNION 和 UNION ALL 使用
UNION 和 UNION ALL 操作的结果集的列名和数据类型是根据第一个查询的结果集来决定的,因此如果第一个查询的列名或数据类型发生变化,后续查询的结果集也会相应地发生变化。 如果想要在 UNION 中使用 ORDER BY 对...
SQL注入笔记-union联合查询
UNION和UNION ALL是数据库中用于合并查询结果集的操作符,它们有一些关键的区别。 UNION操作符将两个或多个SELECT语句的结果集合并为一个结果集,并自动去除其中的重复行。这意味着,如果两个结果集中有相同的行,...
3、测试数据说明超女基本信息历史表(T_GIRL_HIS)中有4条记录,超女基本信息表(T_GIRL)中有3条记录,两个表中有相交的记录('0103'、'010
SELECT ... UNION ALL SELECT C.TRD_NO FROM XXXXXXXXX C WHERE C.CLIENT_CD = W_IN_CLIENT_CD ) D WHERE A.TRD_NO = D.TRD_NO AND A.CLIENT_CD = W_IN_CLIENT_CD AND A.RESULT IS NULL ;
struct和union struct和union
本程序中定义了一个结构体,其成员有一个union,union中又定义了一个结构体,很好的体现了使用union的方法
Informatica Union Transformation组件 详解
oracle集合union、union all、intersect、minus
本文实例讲述了MySQL Union合并查询数据及表别名、字段别名用法。分享给大家供大家参考,具体如下: union关键字 SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 UNION ALL SELECT s_id, f_name...
今天在接到一个需求的时候使用了UNION进行查询后发现,如果两个查询分别使用ORDER BY后拼接居然无法成功排序,经过了好一番折腾,记录下 表结构及数据 -- 创建表 CREATE TABLE test_user ( ID int(11) NOT NULL ...
union all与order by用法,并详细举例,oracle pl/sql