使用Exists条件阻止选择查询以重新评估每次

问题描述 投票:0回答:1

我们有一个使用JET数据库引擎针对Access数据库运行的SQL查询。不幸的是,我们无法创建任何存储过程或移动到SQL Server,这将是我的偏好。 [捂脸]。

问题是查询非常慢。处理请求大约需要2分钟,我们必须在4个不同的表上执行此操作,因此需要8分钟的处理时间。当我们独立运行每个select语句时,它们将花费1-2秒。当我们将它们放在一起并使用它减慢的EXISTS子句时。我们有一个带有两个表的数据库,第一个表大约有3000行,第二个表大约有5000行。我们想要选择第一个表中另一个表的字符串中存在值(FieldName)的所有行。我们不需要第二个表中的任何字段,只知道FieldName存在于VBScript列的某个位置。我相信这是写的方式,它针对每一行(3000 * 5000)对整个第二个表执行查询。无论如何都要更改此查询,以便不执行那么多查找?

SELECT A1.* 
FROM 
    (SELECT * 
     FROM tblEncompasstoCB CB
     WHERE ((NOT CB.VBScript IS NULL) AND (CB.VBScript <> ''))) AS A1
WHERE 
    EXISTS (SELECT * FROM tblMapping
            WHERE (tblMapping.VBScript <> '')
              AND (InStr(tblMapping.VBScript, IIF(INSTR(A1.FieldName, '~') > 0, MID(A1.FieldName, 1, INSTR(A1.FieldName, '~') - 1), A1.FieldName)) > 0))
    OR
    EXISTS (SELECT * FROM tblCustomMapping
            WHERE (tblCustomMapping.VBScript <> '')
              AND (InStr(tblCustomMapping.VBScript, IIF(INSTR(A1.FieldName, '~') > 0, MID(A1.FieldName, 1, INSTR(A1.FieldName, '~') - 1), A1.FieldName)) > 0))
c# sql database ms-access jet
1个回答
0
投票

存在时仅使用SELECT TOP 1

© www.soinside.com 2019 - 2024. All rights reserved.