【发布时间】:2017-08-31 12:02:01
【问题描述】:
我目前正在使用 Microsoft Access 2013,我正在尝试将 Table1 和 Table2 连接在一起,但问题是 Table2 很大。表 1 是零件、供应商组合的列表,其中 PK 作为零件、供应商。表 2 是我创建的表,其中包含每个部分、供应商组合的前 2 个最新报价。所有这些报价都是从带有 PK quote_id 的表中提取的。我认为我创建 Table2 可能是问题所在,因为我无法使用每个部分、供应商组合创建 Table2(我必须按供应商过滤掉)。这是我用于 Table2 的查询。
a.part, a.vendor, a.quote_date
FROM quoteTable AS a
WHERE a.quote_date > DATEADD("yyyy", -3, DATE()) AND
a.quote_date IN
(SELECT TOP 2 quote_date
FROM quoteTable
WHERE quote_date > DATEADD("yyyy", -3, DATE()) AND
part=a.part AND vendor=a.vendor
ORDER BY quote_date DESC)
如果有人知道一种更好的方法,可以从表格中为每个零件、供应商组合选择前 2 个最新报价,我将不胜感激。至于加入,这可行,但需要的时间太长。
SELECT *
FROM Table1 AS a INNER JOIN Table2 AS b ON a.id = b.id
我想知道是否有一种方法可以使用 Table1 中的 id 来过滤 Table2?像这样的:
SELECT *
FROM Table1 AS a INNER JOIN
(SELECT * FROM Table2 WHERE id=a.id) AS b ON a.id = b.id
【问题讨论】:
-
你为你的表创建索引了吗?
-
好吧,如果您选择海量数据,则需要很长时间。你真的需要所有的记录吗?
-
性能问题应该包括
EXPLAIN ANALYZE和一些关于表大小、索引、当前时间性能、期望时间等的信息。Slow是一个相对术语,我们需要一个真实的值来比较。 -
是什么让表 2 如此庞大。里面有图片吗?
-
我需要表1中的所有记录,但我只需要表1中存在的表2中的记录。它有点复杂。所以表 2 是我创建的表,其中填充了引用表中每个部分的前 2 个最新引用。当我将表 1 与报价表连接起来时,即使有 1 亿个报价,它也会运行得很快。但是当我加入表 2 时需要几个小时