2016-06-21 127 views
1

超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))); 

查询以较小的剂量工作,但没有大记录大小。

任何帮助,将不胜感激。

杰夫

+0

是[链接历史总WO成本]查询? –

回答

4

Right功能在您的加盟条件(在你的情况下,WHERE子句),使得Jet数据库引擎做重复的表扫描。因此,对于162,000行* 40,000行,您正在有效地尝试〜6.5  十亿(6.5E + 9)行比较。

您可能必须在每个表中创建一个单独的Text(3)字段,使用现有的Text字段中的Right(... , 3)填充它们,为它们编制索引,然后将这两个表连接到这些新字段。

0

避免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