zoukankan      html  css  js  c++  java
  • [Forward]: SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison

    SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison

    More than a year ago I had written article SQL SERVER – Union vs. Union All – Which is better for performance? I have got many request to update this article. It is not fair to update already written article so I am rewriting it again with additional information.

    UNION
    The UNION command is used to select related information from two tables, much like the JOIN command. However, when using the UNION command all selected columns need to be of the same data type. With UNION, only distinct values are selected.

    UNION ALL
    The UNION ALL command is equal to the UNION command, except that UNION ALL selects all values.

    The difference between Union and Union all is that Union all will not eliminate duplicate rows, instead it just pulls all rows from all tables fitting your query specifics and combines them into a table.

    A UNION statement effectively does a SELECT DISTINCT on the results set. If you know that all the records returned are unique from your union, use UNION ALL instead, it gives faster results.

    Run following script in SQL Server Management Studio to see the result between UNION ALL and UNION. Download complete script from here.

    /* Declare First Table */
    DECLARE @Table1 TABLE (ColDetail VARCHAR(10))
    INSERT INTO @Table1
    SELECT 'First'
    UNION ALL
    SELECT 'Second'
    UNION ALL
    SELECT 'Third'
    UNION ALL
    SELECT 'Fourth'
    UNION ALL
    SELECT 'Fifth'
    /* Declare Second Table */
    DECLARE @Table2 TABLE (ColDetail VARCHAR(10))
    INSERT INTO @Table2
    SELECT 'First'
    UNION ALL
    SELECT 'Third'
    UNION ALL
    SELECT 'Fifth'
    /* Check the data using SELECT */
    SELECT *
    FROM @Table1
    SELECT *
    FROM @Table2
    /* UNION ALL */
    SELECT *
    FROM @Table1
    UNION ALL
    SELECT *
    FROM @Table2
    /* UNION */
    SELECT *
    FROM @Table1
    UNION
    SELECT
    *
    FROM @Table2
    GO

    In our example we have two tables: @Table1 and @Table2.

    Now let us run UNION ALL and UNION together and see the resultset as well as Execution Plan compared to complete set of query. You can always turn on actual execution plan using CTRL+M.

    We can see from the resultset of UNION ALL that it returns everything from both the table but from UNION it is very clear that only DISTINCT rows from both the table is only retrieved.

    Additionally, when comparing the execution plan of UNION ALL and UNION it is also quite clear that UNION ALL is way less expensive than UNION as it does not have DISTINCT SORT operation.

    Let me know what do you think about this article. If you have any suggestion for improvement please let me know and I will update articles according to that.

    Reference : Pinal Dave (http://blog.SQLAuthority.com)

    做个快乐的自己。
  • 相关阅读:
    [webpack]解决报错 CleanWebpackPlugin is not a constructor
    awk匹配案例
    ftp的主动模式和被动模式区别:
    为正在运行的容器添加端口映射
    第三章 pod:运行于kubernetes中的容器
    kubernetes介绍
    k8s基础整理-标签/注解/命名空间
    MySQL5.7修改用户密码
    基于kubernetes v1.17部署dashboard:v2.0-beta8
    使用OpenSSL生成自签名SSL证书
  • 原文地址:https://www.cnblogs.com/Jessy/p/2092225.html
Copyright © 2011-2022 走看看