我正在处理一个巨大的客户记录表(大约 6200 万客户),我需要检索每个客户的计数。目前,有一个 Order 表和一个 Unique Customers 表。我执行一个简单的内部联接来检索记录。
但是,由于 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
感谢您的见解!
最佳答案
不知道为什么要在输出列表中包含 OrderID
- 您正在尝试获取计数,对吧,而不是包含 6200 万个 OrderID
的列表?此外,我不确定为什么您需要将 DISTINCT
应用于 OrderID
- 您的 Orders
表不应允许此处有重复值;如果是这样,您的模式就乱七八糟了。
此外,使用 EXISTS
子句而不是 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;
关于sql - 从一个巨大的表中检索计数的更节省空间的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789550/