1

我们如何根据接近值的条件匹配列。这需要复杂查询/范围比较/多连接条件。获取查询大小超过 2GB 错误。

表:

InvDetails1 / InvDetails2 / INVDL / ExpectedResult

领域关系:

InvDetails1.F1 = InDetails2.F3

InvDetails2.F5 = INVDL.F1

INVDL.DLID = ExpectedResult.DLID

ExpectedResult.Total - 1 <  InvDetails1.F6 < ExpectedResult.Total + 1

left(InvDetails1.F21,10) = '2013-03-07'

返回来自 ExpectedResult 的记录数仅为 1 的结果。

Group by InvDetails1.F1 , count(ExpectedResult.DLID) works.

从这个结果。

最后结果 :

InvDetails1.F1 , InvDetails1.F16 , ExpectedResult.DLID , ExpectedResult.NMR

ExpectedResult - has millions of rows.
InvDetails - few hundred thousands
4

1 回答 1

2

如果我处于这种情况并且发现我的查询在 2GB 时“撞墙”,那么我会尝试创建一个单独保存的 Select Query 来隔离特定日期InvDetails1的记录。然后,在加入其他表时,我会使用该查询而不是整个表。InvDetails1

我的理由是查询优化器可能无法在执行计划的早期使用您的left(InvDetails1.F21,10) = '2013-03-07'条件来排除InvDetails1记录,这可能导致查询增长得比它真正需要的大得多(在内部,当它正在处理时)。通过将日期选择放在单独的(先决条件)查询中,将日期选择强制到流程的开头可以将“主要”查询的大小保持在更可行的大小。

此外,如果我发现自己的查询变得如此之大,我也会密切关注我的 .accdb(或 .mdb)文件的大小,以确保不会太接近 2GB。我自己从来没有遇到过这种情况,但我听说达到 2GB 障碍的数据库文件可能会导致一些严重的错误,而且恢复起来相当“具有挑战性”。

于 2013-04-02T14:27:47.950 回答