【发布时间】:2018-07-02 11:41:33
【问题描述】:
我有两张桌子:
-
大约有 300,000 行的交易和以下字段:
- 交易 ID
- 客户 ID
- 问
- 是
- 类型
-
大约 10,000 行的价格和以下字段:
- 客户 ID
- 问
- 是
- 类型
- 价格
我尝试使用 4 个字段加入它们:ClientID, Q, Y, Type,但我一直收到 2GB 错误,说结果表太大。问题是结果应该是 300,000 行,所以我的猜测是 Access 以某种愚蠢的方式执行此操作,首先创建笛卡尔积并引发错误。有趣的是,如果我只使用 ClientID 加入它就可以正常工作并提供数百万行。
谁能帮我找到正确的出路?或许我只需要了解一下join是如何在幕后执行的,但到目前为止我还没有发现任何有意义的东西。
我考虑添加 hash 列,该列将在两个表中连接 4 列并使用它来连接,但它是如此丑陋的解决方案,我只是畏缩。
我现在的SQL是这样的
SELECT TransactionID, Price
FROM Transactions
INNER JOIN Prices
ON Transactions.ClientID = Prices.ClientID
AND Transactions.Q = Prices.Q
AND Transactions.Y = Prices.Y
AND Transactions.Type = Prices.Type
【问题讨论】:
-
只有这两个表的数据库的当前大小是多少?
-
你在加入之前压缩了数据库吗?
-
你有正确的 clientId 索引吗?
-
@PatrickHonorez 我没有,但最终目标是动态生成这些表,所以我不认为这是一个解决方案。