Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server替代品或处于where条件_Sql_Sql Server - Fatal编程技术网

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