2014-06-12 34 views
-1

我有一个SQL查询可以有大约1.5k的OR或以下列形式的OR。他们是我拥有的人员的ID,他们可以单独选择,因此在选择每个人时都有许多OR。它是更好地只是选择每个人的ID,然后把它放在条件,UNION,而不是OR,或者使用IN聚成一团所有ID,因为用户可以选择每个人都接受1人。谢谢。在许多OR情况下改善sql查询

... 
AND (
     (UserID = '53b95690-22d8-44a2-ad56-919cb4037218') 
    OR (UserID = '87b7fc0c-28f4-4f2e-9909-066df42245fa') 
    OR (UserID = '98c1b5e3-6ba5-4bd9-b8f5-d3b2221e3e3a') 
    OR... 

编辑:完整的查询,如要求;

SELECT * 
FROM Mail WITH (NOLOCK) 
WHERE Active= 1 
AND Company= '1d034e8b-0122-4531-8795-895d9287920f' 
AND (
    CompanyDivisionID= '129bcca1-b1d8-4a9e-8152-0b9e936c9d01' 
    OR CompanyDivisionID= '1bf4023d-22a3-4520-b751-7842576f42b7' 
    ) 
AND (
    (DestinationUserID = '53b95690-22d8-44a2-ad56-919cb4037218') 
    OR (DestinationUserID = '87b7fc0c-28f4-4f2e-9909-066df42245fa') 
    OR (DestinationUserID = '98c1b5e3-6ba5-4bd9-b8f5-d3b2221e3e3a') 
      ... 
      ... 
      ... 
    OR (DestinationUserID = '8c78fc05-7969-48fd-9b30-774e5d9a70bd') 
    OR (DestinationUserID = 'e7b76096-fe7d-44b8-9158-8293ac609471') 
    OR (DestinationUserID = '8a6b7385-4339-43fb-b95b-a7b687982bcd') 
    ) 
ORDER BY SendingDate DESC 
+2

'IN'由优化器转换为'OR',所以不会有任何区别。你在使用参数吗?这个选择有什么用途? – NickyvV

+0

我可以有一堆用户ID(Guid)作为参数,具体取决于用户选择哪一个。我最近发现他们有时会选择所有,这就造成了这种情况。 – mechanicum

+1

@mechanicum:你能显示完整的查询吗? – Arion

回答

2

创建一个包含所选用户标识的(临时)表并加入到该表中。

SELECT * 
FROM Mail WITH (NOLOCK) 
    inner join SelectedUsers on mail.DestinationUserID = SelectedUsers.UserID 
WHERE Active= 1