3

我正在处理一个巨大的客户记录表(大约 6200 万客户),我需要检索每个客户的计数。目前,有一个订单表和一个唯一客户表。我执行一个简单的内部联接来检索记录。

但是,由于 Orders 表的大小,临时文件超过了 15 GB。这是有问题的,因为客户端的可用空间有限。有没有比我当前的查询更节省空间的方法来检索计数?

SELECT A.CustomerID
  ,B.OrderID
  ,count(distinct B.OrderID) as Num_Orders
FROM UniqueCustomers as A
INNER JOIN Orders as B on A.CustomerID = B.CustomerID
GROUP BY A.CustomerID, B.OrderID

感谢您的洞察力!

4

1 回答 1

6

不知道为什么要包含OrderID在输出列表中-您正在尝试计数,对,而不是 6200 万OrderIDs 的列表?此外,我不确定您为什么需要申请DISTINCT-OrderID您的Orders表格不应允许此处出现重复值;如果是这样,您的架构就搞砸了。

此外,使用EXISTS子句而不是 a-会更有效,JOIN但是如果您使用SELECT INTO.

SELECT CustomerID, Num_Orders = COUNT(OrderID)
  FROM dbo.Orders AS o
  WHERE EXISTS 
  (
    SELECT 1 FROM dbo.UniqueCustomers WHERE CustomerID = o.CustomerID
  )
  GROUP BY CustomerID;
于 2013-07-22T14:07:40.543 回答