GVKun编程网logo

SQLServer的UNION比UNION ALL具有更好的性能?(sqlserver中union和union all的区别)

12

对于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的区别)

SQLServer的UNION比UNION ALL具有更好的性能?(sqlserver中union和union all的区别)

我知道UNION ALL应该比UNION具有更好的性能(参见: performance of union versus union all).

现在,我有这个庞大的存储过程(有很多查询),其中最后的结果是两部分SELECT,它们之间有一个UNION.由于两个数据集彼此都是外来的,我可以使用UNION ALL,它假设更好(没有明显的操作).

我在几个数据库上检查它,它工作正常.问题是我的一个客户给我他的数据库进行性能调整,当我调查它时,我注意到如果我将UNION ALL更改为UNION,性能会更好(!).这是我在存储过程中所做的所有改变.

有人可以解释一下这种情况会怎样?

谢谢,
谢夫

更新:
两个查询的附加执行计划(差异部分):

解决方法

您引用了另一个指向此 article的主题.

如果你检查这个,这里有两个不同的执行计划.最大的区别是distinct Sort使得表现更差.

在您的示例中,两个执行计划与物理操作Merge Join具有相同的步骤(仅逻辑操作不同).甚至估计都是一样的.

现在我真的是courios:两个查询之间的区别有多大?

如果您没有执行以下操作,请再次重复测试:
1)在运行PRC之前使用以下行:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

这使缓存清晰,你可以在两种情况下进行“冷运行”.您也可以在这里查看其他article.

2)重复运行几次以查看平均值.

差异是否仍然存在?

Ms SQLServer中的Union和Union All的使用方法和区别

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 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750













而我们要找出来所有有营业额 (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 ALLUNION 不同之处在于UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。UNION ALL 的语法如下:

[sql 语句 1]
UNION ALL
[sql 语句 2]

我们用和上一页同样的例子来显示出 UNION ALLUNION 的不同。同样假设我们有以下两个表格,

Store_information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750













而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 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

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 语法与用法

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 文章表: 文章1文章1正文内容...文章2文章2正文内容...文章3文章3正文内容...blog 日志表: 正文内容...文章2文章2正文内容...正文内容...上面两个表数据中,aid=2 的数据记录与 bid=2 的数据记录是一样的。

2.1.使用 UNION 查询

查询两张表中的文章 id 号及标题,并去掉重复记录:

SELECT aid,title FROM article UNION SELECT bid,title FROM blog

返回查询结果如下:

content content 文章1文章2文章32.2.UNION 查询结果说明

  1. 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
  2. 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
  3. 各 SELECT 语句字段名称可以不同,但字段属性必须一致。

3.使用 UNION ALL 查询

查询两张表中的文章 id 号及标题,并返回所有记录:

SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog

返回查询结果如下:

title 文章1文章2文章3文章2显然,使用 UNION ALL 的时候,只是单纯的把各个查询组合到一起而不会去判断数据是否重复。因此,当确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用 UNION ALL 以提高查询效率。

4.MysqL UNION ORDER BY

在 MysqL UNION 中使用  和  是有些需要特别注意的地方,因此单独列出来说明一下。

下面是用于例子测试的两张原始数据表:

title article 文章表: 文章1文章1正文内容...文章2文章2正文内容...文章3文章3正文内容...blog 日志表: 正文内容...文章2文章2正文内容...正文内容...4.1UNION 子句中使用 ORDER BY

子句中使用 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 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

返回查询结果如下:

title 整句中使用 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 blog)
LIMIT 2

可见,LIMIT 与 ORDER BY 经常搭配使用,二者在 UNION 中的使用方式也是一致的。

总结

以上是小编为你收集整理的MySQL UNION 与 UNION ALL 语法与用法全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

MySQL相关文章

黑马程序员最新版JavaWeb综合案例(前后端完整版)
黑马程序员最新版JavaWeb综合案例(前后端完整版)
【MySQL】拿来即用 —— MySQL中的数据类型
MySQL中数据类型的小总结,拿来即用,有效帮助表格的定义过程。
第41讲:MySQL内置的QL性能分析工具
执行计划如下,可以看到ID有不一样的了,那么ID值越大就说明越先执行,那么bmxxb肯定是第一个执行,此时还有一个ID为2的表,相同ID,按照顺序执行,那么第二个执行的就是ryxxb表,ID为1最小,那么就会最后执行ryxxb表。在前面提到的慢SQL日志,虽然超过了我们指定时间,就会被记录到慢SQL里,但是也很有可能一些小的业务逻辑,SQL写的不是那么好,本来1秒就可以搞定的查询,结果用了七八秒,加入慢查询的时间是10秒,那么就不会记录到慢SQL里。我们下面一起来看一下。
Mybatis——#{}和${}的区别
在使用mybatis的时候我们会使用到#{}和${}这两个符号来为sql语句传参数,那么这两者有什么区别呢?#{}是预编译处理,是占位符,${}是字符串替换,是拼接符Mybatis在处理#{}的时候会将sql中的#{}替换成?号,调用PreparedStatement来赋值如:设userName=yuze看日志我们可以看到解析时将#{userName}替换成了 ?然后再把yuze放进去,外面加上单引号设userName=yuze看日志可以发现就是直接把值拼接上去了这极有可能发生sql注入,下面举了
简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer
前段时间因为想要跳槽就去面试了下阿里,大家也都清楚,精通这个词在简历上属于很难把握住的一个词,如果你在你的简历上面写着你精通 XX 技术,那面试官就会默认你是真的很会,刨根问底问到你崩溃。我之前就是在自己的简历上写了一项精通 MySQL,然后就开启了和阿里面试官的 battle 之路,当然最终结果不差,拿到了一份我很满意的高薪 offer。我自己有一个习惯,我也建议大家也养成这个习惯。就是每次面试后我都会对这次面试进行复盘总结,一来能让我清楚自己对哪方面掌握得还不够,及时查漏补缺;二来也大概清楚了面试的方向
MySQL库的操作
创建数据库的SQL如下:CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];说明一下:SQL中大写的表示关键字,[ ]中代表的是可选项。CHARSET用于指定数据库所采用的编码格式。COLLATE用于指定数据库所采用的校验规则。注意: 如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则。
MySQL的事务详解
MySQL事务使用, 特性的介绍, 重点是理解不同隔离级别所解决的问题, 脏读, 不可重复读, 幻读.
[MySQL]事务ACID详解
要么全部带走, 要么一无所有!
  • • 黑马程序员最新版JavaWeb综合案例(前后
  • • 【MySQL】拿来即用 —— MySQL中的数据
  • • 第41讲:MySQL内置的QL性能分析工具
  • • Mybatis——#{}和${}的区别
  • • 简历上写着“精通 MySQL”,阿里面试官
  • • MySQL库的操作
  • • MySQL的事务详解
  • • [MySQL]事务ACID详解
  • • mysql 数据备份与恢复使用详解
  • • MySQL高级SQL语句
python-3.xpandasswiftarraysspring-boodataframeamazon-websql-serverfirebaseAllazureVBArubyregexasp.net-cogoPowerShellalgorithmruby-on-raloopsgoogle-cloapache-spavisual-stuelasticseadelphi.net-coremultithreagoogle-clofor-loopunity3dasp.net-mvmachine-leperformancmavenscalaauthenticapysparkdjango-modvb.netspring-mvc
  • 友情链接:
  • 菜鸟教程
  • 前端之家
  • 编程小课
  • 小编
  • -
  • 我要投稿
  • -
  • 广告合作
  • -
  • 联系我们
  • -
  • 免责声明
  • -
  • 网站地图
版权所有 © 2018 小编 闽ICP备13020303号-8
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜"程序精选"关注
微信扫一扫可直接关注哦!
title

mysql union 与 union all 语法及用法

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 查询结果说明

  1. 重复记录是指查询中各个字段完全重复的记录,如上例,若 title 一样但 id 号不一样算作不同记录。
  2. 第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称,如上例的 aid。
  3. 各 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 语法及用法的相关信息,请在本站查询。

本文标签: