Ms access 在MS Access 2010中,查询与较大的表挂起
超V,Ms access 在MS Access 2010中,查询与较大的表挂起,ms-access,ms-access-2010,Ms Access,Ms Access 2010,超V, 2008 R2 Access 2010 记录数:表1,162769链接到表2,4022262 MS Access挂起并在锁定前不响应。查询如下: SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model, [Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT,
2008 R2
Access 2010
记录数:表1,162769链接到表2,4022262 MS Access挂起并在锁定前不响应。查询如下:
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)));
查询在较小的剂量下工作,但不适用于较大的记录大小
任何帮助都将不胜感激
Jeff连接条件中的
右
函数(在您的情况下,WHERE子句)导致Access数据库引擎重复执行表扫描。因此,对于162000行*40000行,您实际上尝试进行约65亿(6.5E+9)行比较
您可能需要在每个表中创建一个单独的
Text(3)
字段,用现有Text
字段中的Right(…,3)
填充它们,为它们编制索引,然后在这些新字段上联接两个表。Right
函数在联接条件下(在您的例子中,WHERE子句)正在导致Access数据库引擎重复执行表扫描。因此,对于162000行*40000行,您实际上尝试进行约65亿(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;
最好避免使用
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;
[Linked History Total WO Costs]是查询吗?[Linked History Total WO Costs]是查询吗?感谢您的帮助。我将尝试这两种方法,并让你知道它们是如何工作的。再次感谢,谢谢你的帮助。我将尝试这两种方法,并让你知道它们是如何工作的。再次感谢。