SQL server替代品或处于where条件
或的替代方案是什么?该或正在进行此查询 真慢SQL server替代品或处于where条件,sql,sql-server,Sql,Sql Server,或的替代方案是什么?该或正在进行此查询 真慢 您可以尝试删除distinct,并确保在tbl\u响应(ClientRequestId)上有索引: 其他索引可能会有所帮助。此外,卸下外部的独立的(如果不需要也会提高性能)。其他索引可能会有所帮助,但无法指定,因为您没有限定AreCalculationsCompleted经常将或重写为UNION帮助 SELECT DISTINCT c.ID FROM tbl_Case c INNER JOIN tbl_RequestBaseRequest
您可以尝试删除
distinct
,并确保在tbl\u响应(ClientRequestId)
上有索引:
其他索引可能会有所帮助。此外,卸下外部的
独立的(如果不需要也会提高性能)。其他索引可能会有所帮助,但无法指定,因为您没有限定AreCalculationsCompleted
经常将或重写为UNION
帮助
SELECT DISTINCT c.ID
FROM tbl_Case c INNER JOIN
tbl_RequestBaseRequest b
ON CaseId = c.ID
WHERE AreCalculationsCompleted = 0 AND
b.IsApplicantRequest = 1 and
c.IsArchived = 0 AND
(b.ID IN (SELECT ClientRequestId FROM tbl_Response) OR
b.OldClientRequestId IN (SELECT ClientRequestId FROM tbl_Response)
);
SELECT DISTINCT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b ON CaseId = c.ID
INNER JOIN tbl_Response r ON (b.ID = r.ClientRequestId OR b.OldClientRequestId = r.ClientRequestId)
您可以将c和b的连接封装到CTE中,并在联合的两个分支中引用它,而不是重复它,或者如果初始连接本身很昂贵,则将其具体化到临时表中,从而在某种程度上对其进行整理。您将两次运行同一子查询。在这种情况下,您可以将关键字与
一起使用,以便只需运行一次。与答案中的方法相比,这可能是一种更好的方法,也可能不是。
SELECT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b
ON CaseId = c.ID
WHERE AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived = 0
AND b.ID IN (SELECT ClientRequestId
FROM tbl_Response)
UNION
SELECT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b
ON CaseId = c.ID
WHERE AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived = 0
AND b.OldClientRequestId IN (SELECT ClientRequestId
FROM tbl_Response)
SELECT DISTINCT c.id
FROM tbl_Case c
JOIN tbl_RequestBaseRequest b ON CaseId = c.id
WHERE AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived = 0
AND EXISTS(
SELECT *
FROM tbl_Response r
WHERE r.ClientRequestId IN (b.id, b.OldClientRequestId)
)
SELECT DISTINCT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b ON CaseId = c.ID
INNER JOIN tbl_Response r ON (b.ID = r.ClientRequestId OR b.OldClientRequestId = r.ClientRequestId)
SELECT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b
ON CaseId = c.ID
WHERE AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived = 0
AND b.ID IN (SELECT ClientRequestId
FROM tbl_Response)
UNION
SELECT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b
ON CaseId = c.ID
WHERE AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived = 0
AND b.OldClientRequestId IN (SELECT ClientRequestId
FROM tbl_Response)
SELECT DISTINCT c.ID
FROM tbl_Case c
INNER JOIN tbl_RequestBaseRequest b
ON CaseId = c.ID
AND AreCalculationsCompleted = 0
AND b.IsApplicantRequest = 1
AND c.IsArchived=0
AND EXISTS (SELECT NULL
FROM tbl_Response
WHERE ClientRequestId IN (b.ID, b.OldClientRequestId))