簡體   English   中英

需要幫助提高SQL性能(子查詢與連接)

[英]Need help improving SQL performance (subquery versus join)

我有2個表( AllClientsAllActivities ),需要檢索以下信息:

我需要一個不同客戶的列表,其中最近一次活動是在去年輸入的。 我已經得到了以下代碼,但它很慢,因此無用。 我相信一個連接(沒有子查詢)會更快,但我無法弄明白。 這是我當前的sql語句:

select  distinct(AllClients.LookupCode) 
from    AllClients 
join    (select LookupCode, 
                max(AllActivities.EnteredDate) as EnteredDate 
        from AllActivities 
        group by LookupCode) AllActivities 
on      AllClients.LookupCode = AllActivities.LookupCode 
where   AllClients.Name = '$userName' 
and     AllClients.TypeCode = 'P' and AllActivities.EnteredDate < '$oneYearAgo'";

嘗試這個:

select AllClients.LookupCode
from AllClients
join AllActivities on AllClients.LookupCode = AllActivities.LookupCode
where AllClients.Name = '$userName' and AllClients.TypeCode = 'P' 
group by AllClients.LookupCode
having max(AllActivities.EnteredDate) < '$oneYearAgo';

你的意思是這樣的嗎?

  SELECT AllClients.LookupCode
    FROM AllClients
    JOIN AllActivities
      ON AllClients.LookupCode = AllActivities.LookupCode
   WHERE AllClients.Name = '$userName'
     AND AllClients.TypeCode = 'P'
GROUP BY AllClients.LookupCode
  HAVING MAX(AllActivities.EnteredDate) < '$oneYearAgo'";

你不需要做聚合。

select  distinct(AllClients.LookupCode) 
from    AllClients 
where   
        AllClients.Name = '$userName' 
and     AllClients.TypeCode = 'P' 
and     exists (
    select 1 from AllActivities where AllClients.LookupCode = AllActivities.LookupCode and AllActivities.EnteredDate > '$oneYearAgo'
)

我甚至不確定你是否需要在這種配置中distinct

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM