计算来自不同SELECT的总计数

时间:2014-10-21 18:10:56

标签: sql sql-server

我在SQL Server 2008中编写的存储过程中有以下代码:

    select sum(Sum1)
    from
    (
        select count(1) as Sum1 from Table1
        UNION ALL 
        select count(1) as Sum1 from Table2
        UNION ALL 
        select count(1) as Sum1 from Table3
        UNION ALL 
        select count(1) as Sum1 from Table4

    ) as SumCount

UNION ALL加入了更多的SELECT语句。我如何重写查询以优化性能?是否有其他操作员而不是UNION ALL有助于提高性能?

2 个答案:

答案 0 :(得分:1)

这个速度和它一样快。您想要计算所有表中的所有行,这就是您正在做的事情。 (使用COUNT(*)会更清楚,因为你想计算行数。使用COUNT(1)意味着计算生成的1不为空的所有行,但当然dbms将其优化为{ {1}}内部。)

您也可以尝试:

COUNT(*)

我认为这更具可读性。我想dbms将使用相同的执行计划。好吧,你仍然可以尝试。

答案 1 :(得分:0)

您的查询是我如何做的,因为它允许优化器使用目录中的数据来产生答案,而不是表/索引I / O.

还有另一种方法可以做到这一点,我从未尝试过,但它可能值得一试:

select count(*) from
(
    select 1 a from Table1
    UNION ALL 
    select 1 from Table2
    UNION ALL 
    select 1 from Table3
    UNION ALL 
    select 1 from Table4
) as SumCount

让我知道它与您的查询相比如何。