如何避免在很多列上进行分组

Ple*_*eun 5 sql sql-server-2008

我有两个大桌子

-主表A:140
万行-详细表B:900万行

B具有A的外键。

基本上,我需要表A +的所有25个明细字段,在这种情况下,要依靠B。

现在,我有以下伪查询:

Select
       A.field1,
       A.field2,
       ...
       A.field25,
       Count(b.id)
 from
       A left outer join B on B.fkAid = A.id
 Group by 
       A.id,
       A.field1,
       A.field2,
       ...
       A.field25
Order by A.field1  
Run Code Online (Sandbox Code Playgroud)

查询计划显示分组需要花费大量时间(不足为奇)。

有没有更有效的方法来进行这种选择?

Cra*_*ste 4

使用公用表表达式怎么样(您将其标记为 SQL Server 2008?)

WITH CountB AS
(
    SELECT A.aId, value= Count(*)
    FROM A left outer join B on B.fkAid = A.id
    GROUP BY A.id
)
Select
   A.field1,
   A.field2,
   ...
   A.field25,
   CountB.value
from
   A left outer join CountB on A.id = CountB.aId
Order by A.field1  
Run Code Online (Sandbox Code Playgroud)