对于SQLServer的UNION比UNIONALL具有更好的性能?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver中union和unionall的区别,并且为您提供关于M
对于SQLServer的UNION比UNION ALL具有更好的性能?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver中union和union all的区别,并且为您提供关于Ms SQLServer中的Union和Union All的使用方法和区别、mysql sql语句多表合并UNION ALL和UNION、MySQL UNION 与 UNION ALL 语法与用法、mysql union 与 union all 语法及用法的宝贵知识。
本文目录一览:- SQLServer的UNION比UNION ALL具有更好的性能?(sqlserver中union和union all的区别)
- Ms SQLServer中的Union和Union All的使用方法和区别
- mysql sql语句多表合并UNION ALL和UNION
- MySQL UNION 与 UNION ALL 语法与用法
- mysql union 与 union all 语法及用法
SQLServer的UNION比UNION ALL具有更好的性能?(sqlserver中union和union all的区别)
现在,我有这个庞大的存储过程(有很多查询),其中最后的结果是两部分SELECT,它们之间有一个UNION.由于两个数据集彼此都是外来的,我可以使用UNION ALL,它假设更好(没有明显的操作).
我在几个数据库上检查它,它工作正常.问题是我的一个客户给我他的数据库进行性能调整,当我调查它时,我注意到如果我将UNION ALL更改为UNION,性能会更好(!).这是我在存储过程中所做的所有改变.
有人可以解释一下这种情况会怎样?
谢谢,
谢夫
更新:
两个查询的附加执行计划(差异部分):
解决方法
如果你检查这个,这里有两个不同的执行计划.最大的区别是distinct Sort使得表现更差.
在您的示例中,两个执行计划与物理操作Merge Join具有相同的步骤(仅逻辑操作不同).甚至估计都是一样的.
现在我真的是courios:两个查询之间的区别有多大?
如果您没有执行以下操作,请再次重复测试:
1)在运行PRC之前使用以下行:
DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS
这使缓存清晰,你可以在两种情况下进行“冷运行”.您也可以在这里查看其他article.
2)重复运行几次以查看平均值.
差异是否仍然存在?
Ms SQLServer中的Union和Union All的使用方法和区别
Ms sqlServer中的Union和Union All的使用方法和区别
sql UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
sql UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值,即UNION是去了重的。如果允许重复的值,请使用 UNION ALL。
sql UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
UNION 指令的目的是将两个 sql 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。union只是将两个结果联结起来一起显示,并不是联结两个表…………
UNION 的语法如下:
[sql 语句 1]
UNION
[sql 语句 2] 假设我们有以下的两个表格,
Store_information 表格
|
|||||||||||||||
Internet Sales 表格
|
而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 sql 语句:
SELECT Date FROM Store_information
UNION
SELECT Date FROM Internet_Sales
结果:
Date |
Jan-05-1999 |
Jan-07-1999 |
Jan-08-1999 |
Jan-10-1999 |
Jan-11-1999 |
Jan-12-1999 |
有一点值得注意的是,如果我们在任何一个 sql 语句 (或是两句都一起) 用 "SELECT disTINCT Date" 的话,那我们会得到完全一样的结果。
sql Union All
UNION ALL 这个指令的目的也是要将两个 sql 语句的结果合并在一起。 UNION ALL 和UNION 不同之处在于UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。UNION ALL 的语法如下:
[sql 语句 1]
UNION ALL
[sql 语句 2]
我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同。同样假设我们有以下两个表格,
Store_information 表格
|
|||||||||||||||
Internet Sales 表格
|
而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 sql 语句:
SELECT Date FROM Store_information
UNION ALL
SELECT Date FROM Internet_Sales
结果:
Date |
Jan-05-1999 |
Jan-07-1999 |
Jan-08-1999 |
Jan-08-1999 |
Jan-07-1999 |
Jan-10-1999 |
Jan-11-1999 |
Jan-12-1999 |
mysql sql语句多表合并UNION ALL和UNION
select
d1.ID,CAST(d1.ID AS CHAR) AS intId, d1.CODE_TYPE, d1.CODE, d1.CODE_IMG, d1.VALUE
from m_dict_code d1
where d1.CODE_TYPE in(''USER_TYPE'',''addSupers'')
UNION
select 0,v.ID,v.TYPE,v.`CODE`,v.DESCRIPTION,v.VALUE_STRING from m_variable as v where v.type=''tequan''
limit 1,20
说明:
1.CAST (expression AS data_type)字段类型转换函数
CAST (表名.字段名 AS 类型)
注意:
1.mysql int转varchr会出现问题
错误: CAST (表名.字段名 AS varchar)
正确:CAST (表名.字段名 AS char)或concat(d1.ID,'''')
说明:
将Int 转为varchar经常用 concat函数,比如concat(8,’′)
将varchar 转为Int 用 cast(a as signed)
2.UNION和UNION all 多表合并函数
问题:
1.两表字段类型不一致 用cast或concat函数解决
2.两表列属性数量不一致问题 select后跟相同类型字段值 (int类型)0或(字符串)''''解决问题
3.(自动去重)UNION (允许重复的值)UNION all
mysql api:http://www.mysqlab.net/docs/view/refman-5.1-zh/chapter/functions.html
MySQL UNION 与 UNION ALL 语法与用法
1.MysqL UNION 语法
MysqL UNION 用于把来自多个 语句的结果组合到一个结果集合中。语法为:
SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2 ...
在多个 SELECT 语句中,对应的列应该具有相同的,且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。
1.1.UNION 与 UNION ALL 的区别
当使用 UNION 时,MysqL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MysqL 会把所有的记录返回,且效率高于 UNION。
2.MysqL UNION 用法实例
UNION 常用于数据类似的两张或多张表查询,如不同的数据分类表,或者是数据历史表等。下面是用于例子的两张原始数据表:
article 文章表:2.1.使用 UNION 查询
查询两张表中的文章 id 号及标题,并去掉重复记录:
SELECT aid,title FROM article UNION SELECT bid,title FROM blog
返回查询结果如下:
content | |
---|---|
content |
- 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
- 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
- 各 SELECT 语句字段名称可以不同,但字段属性必须一致。
3.使用 UNION ALL 查询
查询两张表中的文章 id 号及标题,并返回所有记录:
SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog
返回查询结果如下:
title |
---|
4.MysqL UNION ORDER BY
在 MysqL UNION 中使用 和 是有些需要特别注意的地方,因此单独列出来说明一下。
下面是用于例子测试的两张原始数据表:
title |
---|
子句中使用 ORDER BY,即将 子句的结果先排序,然后再把这些子句查询的结果进行集合。
在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且
(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10) UNION ALL (SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)
返回查询结果如下:
content | |
---|---|
content |
如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。
(SELECT aid,title FROM article) UNION ALL (SELECT bid,title FROM blog) ORDER BY aid DESC
返回查询结果如下:
title |
---|
4.3 UNION ORDER BY 应用于别名
如果 SELECT 中使用到了,则 OEDER BY 必须引用别名:
(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b
5.MysqL UNION LIMIT
在 MysqL UNION 中使用 LIMIT 用于限制返回的记录条数,如果对 SELECT 子句做限制,需要对 SELECT 添加圆括号:
(SELECT aid,title FROM article LIMIT 2) UNION ALL (SELECT bid,title FROM blog LIMIT 2)
该 sql 会返回个 SELECT 语句的两条记录,如果不添加圆括号,则最后一个 LIMIT 2 会作用于整个 UNION 语句而一共返回 2 条记录。
同 ORDER BY 类似,当需要对整个 UNION 的结果进行 LIMIT 限制时,建议将各个 SELECT 语句用圆括号括起来以使语句更加清晰:
(SELECT aid,title FROM blog) LIMIT 2
可见,LIMIT 与 ORDER BY 经常搭配使用,二者在 UNION 中的使用方式也是一致的。
总结
以上是小编为你收集整理的MySQL UNION 与 UNION ALL 语法与用法全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
MySQL相关文章
- • 黑马程序员最新版JavaWeb综合案例(前后
- • 【MySQL】拿来即用 —— MySQL中的数据
- • 第41讲:MySQL内置的QL性能分析工具
- • Mybatis——#{}和${}的区别
- • 简历上写着“精通 MySQL”,阿里面试官
- • MySQL库的操作
- • MySQL的事务详解
- • [MySQL]事务ACID详解
- • mysql 数据备份与恢复使用详解
- • MySQL高级SQL语句
title |
---|
mysql union 与 union all 语法及用法
1.mysql union 语法
mysql union 用于把来自多个select 语句的结果组合到一个结果集合中。语法为:
select column,......from table1
union [all]
select column,...... from table2
...
在多个select 语句中,对应的列应该具有相同的字段属性,且第一个select 语句中被使用的字段名称也被用于结果的字段名称。
1.1 union 与 union all 的区别
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,mysql 会把所有的记录返回,且效率高于union 。
2. mysql union 用法示例
union 常用与数据类似的两张或多张表查询,如不同的数据分类表,或者是数据历史表等,下面是用于测试的两张表;
2.1使用 UNION 查询
查询两张表中的文章 id 号及标题,并去掉重复记录:
SELECT aid,title FROM article UNION SELECT bid,title FROM blog
返回查询结果如下:
2.2.UNION 查询结果说明
- 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
- 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
- 各 SELECT 语句字段名称可以不同,但字段属性必须一致。
3.使用 UNION ALL 查询
查询两张表中的文章 id 号及标题,并返回所有记录:
SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog
返回查询结果如下:
显然,使用 UNION ALL 的时候,只是单纯的把各个查询组合到一起而不会去判断数据是否重复。因此,当确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用 UNION ALL 以提高查询效率。
4.MySQL UNION ORDER BY
在 MySQL UNION 中使用 ORDER BY 和 LIMIT 是有些需要特别注意的地方,因此单独列出来说明一下。
下面是用于例子测试的两张原始数据表:
4.1UNION 子句中使用 ORDER BY
子句中使用 ORDER BY,即将 SELECT 子句的结果先排序,然后再把这些子句查询的结果进行集合。
在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与 LIMIT 结合使用:
(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10)
UNION ALL
(SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)
返回查询结果如下:
4.2UNION 整句中使用 ORDER BY
如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。
(SELECT aid,title FROM article)
UNION ALL
(SELECT bid,title FROM blog)
ORDER BY aid DESC
返回查询结果如下:
整句中使用 ORDER BY,去掉 SELECT 子句中的圆括号虽然结果是一样的,但为了语句清晰,建议不要省略圆括号。
4.3 UNION ORDER BY 应用于别名
如果 SELECT 中使用到了字段别名,则 OEDER BY 必须引用别名:
(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b
5.MySQL UNION LIMIT
在 MySQL UNION 中使用 LIMIT 用于限制返回的记录条数,如果对 SELECT 子句做限制,需要对 SELECT 添加圆括号:
(SELECT aid,title FROM article LIMIT 2)
UNION ALL
(SELECT bid,title FROM blog LIMIT 2)
该 SQL 会返回个 SELECT 语句的两条记录,如果不添加圆括号,则最后一个 LIMIT 2 会作用于整个 UNION 语句而一共返回 2 条记录。
同 ORDER BY 类似,当需要对整个 UNION 的结果进行 LIMIT 限制时,建议将各个 SELECT 语句用圆括号括起来以使语句更加清晰:
(SELECT aid,title FROM article)
UNION ALL
(SELECT bid,title FROM blog)
LIMIT 2
可见,LIMIT 与 ORDER BY 经常搭配使用,二者在 UNION 中的使用方式也是一致的。
参考连接:https://www.cnblogs.com/zhangminghui/p/4408546.html
我们今天的关于SQLServer的UNION比UNION ALL具有更好的性能?和sqlserver中union和union all的区别的分享已经告一段落,感谢您的关注,如果您想了解更多关于Ms SQLServer中的Union和Union All的使用方法和区别、mysql sql语句多表合并UNION ALL和UNION、MySQL UNION 与 UNION ALL 语法与用法、mysql union 与 union all 语法及用法的相关信息,请在本站查询。
本文标签: