查询在MS-Access 2010中
问题描述:
超V较大的表挂起,
2008 R2
访问2010
编号记录的:表1,162769链接到表2中,40,2262查询在MS-Access 2010中
MS访问挂起和直到锁定才会响应。查询如下:
SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model,
[Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT,
[Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration,
[Linked History Total WO Costs].ARG
FROM [Civil Aircraft Registry], [Linked History Total WO Costs]
WHERE (((Right([Civil Aircraft Registry].[registration],3))
= Right([Linked History Total WO Costs].[ARG],3)));
查询以较小的剂量工作,但没有大记录大小。
任何帮助,将不胜感激。
杰夫
答
的Right
功能在您的加盟条件(在你的情况下,WHERE子句),使得Jet数据库引擎做重复的表扫描。因此,对于162,000行* 40,000行,您正在有效地尝试〜6.5 十亿(6.5E + 9)行比较。
您可能必须在每个表中创建一个单独的Text(3)
字段,使用现有的Text
字段中的Right(... , 3)
填充它们,为它们编制索引,然后将这两个表连接到这些新字段。
答
避免WHERE
子句中的函数是最佳做法,它会降低性能。
当该函数位于WHERE
子句中时,将针对结果集中的每个记录调用该函数,这会降低查询性能。这样做也会阻止在列上使用任何索引。
您可以创建一个计算列,而不是:
SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model,
[Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT,
[Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration,
[Linked History Total WO Costs].ARG, right([Civil Aircraft Registration],3) AS Reg_3,
right([Linked History Total WO Costs].ARG,3) AS Arg_3
FROM [Civil Aircraft Registry], [Linked History Total WO Costs]
WHERE Reg_3 = Arg_3;
+0
非常感谢您的帮助。我将尝试这两种方法,并让你知道他们是如何工作的。再次感谢。 – Jeff
是[链接历史总WO成本]查询? –