【问题标题】:Optimize or simplify MS Access query优化或简化 MS Access 查询
【发布时间】:2013-05-30 18:10:59
【问题描述】:

我有真正需要时间来执行的 Access 查询。现在,我必须经过至少四个查询才能获得我想要的结果,即按组排名前 4 的百分比。以下是查询。

  1. Query1 - 添加计算字段,即 column3。
  2. Query2 - 为 column3 添加累积字段。
  3. Query3 - 添加我使用 column3 进行计算的计算字段。 calcfield1、calcfield2、calcfield3 使用 UNION 查询将它们组合在一列(NewColumn)中。对 NewColumn 求和并按 GroupID 对其进行分组。
  4. Query4 - 按 GroupID 选择 NewColumn 中的前 4 个值。

示例输出(按 GroupID 排列的 NewColumn 的前 4 个值):

Group1 1.45
Group1 1.00
Group1 0.45
Group1 0.20
Group2 8.20
Group2 4.48
Group2 3.44
Group2 2.00

当我运行 Query4 时,执行需要一段时间(至少 10 分钟)。由于累积百分比计算,查询必须返回所有记录。

我在 Query3 中尝试了 HAVING 子句,以便在我选择前 4 名时最小化 Query4 中的行,但我无法让它工作。我还尝试在 Query2 中获得前 4 名,以便后续查询可以使用的行更少,但查询需要更多时间,我不得不中断查询的执行。

我想简化或至少优化查询。

表结构:

 Table1:
 ID - Autonumber
 GroupID
 Tip1
 Tip2
 Tip3
 Tip4

Sample data Table1:
GroupID    Tip1      Tip2        Tip3      Tip4
171        1          5           4          8
172        2          7           5          3
173        8          16          10          

Table2:
ID - Autonumber
GroupID
Result1
Result2
Result3

Sample data Table2:
GroupID    Result1  Result2     Result3
171        1          5           4    
172        12         7           5    
173        8          6           3   

Table1 和 Table2 使用 GroupID 连接

【问题讨论】:

  • 你能展示你的表结构和一些示例输入数据吗
  • 是的,Query3 一定是瓶颈,因为三个字段合二为一。如果我能在 Query3 中按组获得前 4 名,我可以淘汰 Query4。但我不知道该怎么做,因为我必须将 HAVING 子句与 Select Top 4 子查询一起使用。
  • 更新:只有 Query4 很慢。其他查询在合理的时间内返回记录。

标签: sql ms-access


【解决方案1】:

我曾经遇到过类似的情况,我必须通过复杂的自联接对数据进行排名。在我首先将数据转储到临时表中然后对其运行更新查询之前,这非常慢。仍然很慢,但没有那么糟糕。

也许您可以使用临时表而不是一系列连接查询?那么 #1、#2 和 #3 可能是作用于该临时表的更新查询。

【讨论】:

  • 我实际上将 staging table 用于#3。没有尝试过#1 和#2。会试一试的。
  • 顺便问一下,我如何更新更改并在临时表上插入新记录?我的意思是,我如何捕捉真实表上的变化,以便变化反映在临时表上?
  • 这并不难。您的问题基本上转化为“我如何在 Access 中进行更新查询?”所以尝试谷歌搜索。例如,当您创建临时表(可能使用生成表查询)时,为“Column3”包含一个空白字段,然后让更新查询填充它。
  • 我创建了与我打算使用更新查询更新的查询类似的表。你认为make-table查询有必要吗?另外,我知道如何进行更新查询。我只是想知道在哪里可以更好地捕捉更改,以便我可以在表单或数据宏中运行更新查询。
  • 我在所有查询中都使用了暂存表。我没有捕捉到变化,所以我没有使用 UPDATE。我只使用 DELETE * 后跟 INSERT。你是对的,执行力提高了。感谢 PowerUser!
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多