需要以更有效的方式替换DLookup

时间:2019-07-11 20:56:33

标签: sql performance ms-access-2016

我想我对此已经麻木了。我有一个Access查询,它完全可以执行我想要的操作。但是我使用包含DLookup的IIF做到了。运行需要几分钟。如果仅用引号替换DLookup,它将在几秒钟内运行。所以我知道是DLookup造成了所有延迟。我已经重新设计了该查询20倍,尝试使用不同的联接方法,但是我必须丢失一些东西。

我有几张桌子 qryUniqueDevices具有一个正式名称,这对99%的人来说毫无意义。 对于大多数产品,tblDeviceCategoryDB具有良好的设备类型和类别。 qryDevType具有基于官方名称的所有设备的通用类型。 如果设备没有在tblDeviceCategoryDB中列出的特定类型,我想使用在qryDevType中列出的通用类型。

SELECT qryUniqueDevices.[Official Name], qryUniqueDevices.Manufacturer, qryUniqueDevices.Model, 
IIf(IsNull([tblDeviceCategoryDB].[DevType]),
DLookUp("DevType","qryDevType","[Official Name] = '" & [qryUniqueDevices].[Official Name] & "'"),[tblDeviceCategoryDB].[DevType]) AS DevType, tblDeviceCategoryDB.DevCat, tblDeviceCategoryDB.ID
FROM qryUniqueDevices
LEFT JOIN tblDeviceCategoryDB ON (qryUniqueDevices.Model = tblDeviceCategoryDB.Model) AND (qryUniqueDevices.Manufacturer = tblDeviceCategoryDB.Manufacturer) AND (qryUniqueDevices.[Official Name] = tblDeviceCategoryDB.[Official Name]);

如果设备没有在tblDeviceCategoryDB中列出的特定类型,我想使用在qryDevType中列出的通用类型。现在它可以工作,但是由于该愚蠢的DLookup而需要3-5分钟才能运行。

0 个答案:

没有答案