sql - 从一个巨大的表中检索计数的更节省空间的方法

标签 sql sql-server database performance

我正在处理一个巨大的客户记录表(大约 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/

相关文章:

CSV 导入后 MySQL WHERE 子句不起作用

sql - 未明确说明时选择不包括空值

sql - 提高非聚集索引查找的性能

sql - INSERTED 表中的多行

c# - 从现有值 使用 SQL Server 中的逗号分隔值更新列

sql boolean 数据类型替代

sql - 记录 SQL Server 2008 Express 数据库上的所有查询?

SQL排除没有子查询的行

php - Mysql REPLACE 不工作

sql - 在 Pycharm 中安装 pymssql 2.1.3