2013-01-14 15 views
0

我下表一起工作的具體日期範圍(包括下面的虛擬數據;同時實際的表有大約50K的記錄)確定新的記錄增加了在同一個表(SQL Server)的

表All_Users的

ID, Domain, ReportDate, SamAccountName 
1, Win1, 1/7/2013, user1 
2, Win1, 1/7/2013, user2 
3, Win1, 1/7/2013, user3 
4, Win1, 1/14/2013, user1 
5, Win1, 1/14/2013, user2 
6, Win1, 1/14/2013, user3 
7, Win1, 1/21/2013, user1 
8, Win1, 1/21/2013, user2 
9, Win1, 1/21/2013, user3 
10, Win1, 1/21/2013, user4 
11, Win1, 1/21/2013, user5 

我們每週都會從AD上傳一個摘錄到SQL Server數據庫(由Report date列標識)。 目標是能夠運行查詢來識別爲特定日期範圍添加的新AD帳戶。

E.g, identify new AD accounts added from 1/7/2013 through 1/21/2013 

The result should be: 
10, Win1, 1/21/2013, user4 
11, Win1, 1/21/2013, user5 

目前,我有一個查詢,如下所示:

SELECT DISTINCT ReportDate, SamAccountName, Domain, ID 
FROM dbo.tbl_All_Users 
WHERE (NOT (SamAccountName IN 
     (SELECT SamAccountName 
     FROM tbl_All_Users 
     WHERE (ReportDate = '1/7/2013')))) AND (ReportDate = '1/21/2013') 

這最初的工作,而是作爲表grew-查詢已啓動超時(很明顯reasons-它不是有效的一個位)。

什麼是有效的方法來做到這一點?我已經嘗試使用內部連接(正如我在本網站上發佈的帖子中看到的那樣),但我似乎無法得到它以適合我的具體情況。鑑於我缺乏SQL知識,我似乎無法弄清楚。

+0

這聽起來我像你也許將全部提取物表上的每個每週進口,然後試圖找到與上次導入獨特的記錄。如果這是正確的,那麼最好不要導入重複記錄呢?如果沒有,如其他人所述,報告日期和帳戶名稱列中的索引可能會大大提高您的績效,如果它們已經存在,請確保它們不被分割。 –

+0

是的,我們每次都添加完整的提取物。這是我們審計/合規流程的一部分,用於跟蹤帳戶的狀態 - 帳戶啓用,禁用,過期等情況。 – user1978735

回答

1

在重寫查詢之前,應該查看索引的用法。你在桌上有索引嗎?如果沒有,您可能會從ReportDate列的索引開始。

您可能會在該指數方面取得很大進步,但您可能有更多先進性能分析的機會。

+0

我會研究此問題。我認爲這些指數已經建立,但我將不得不再次檢查以確認這一點。 – user1978735

0

這個問題並不完全清楚 - 你是否想要返回所有用戶,除了在這兩個範圍日期中添加(因爲你的查詢似乎在做)?

在這種情況下:

;with newlyAdded (select SamAccountName from dbo.tbl_Al_Users 
where ReportDate IN ('2012017', '20130121')) 

select distinct ReportDate, SamAccountName, Domain, ID 
from dbo.tbl_All_Users T 
where not exists (select 1 from newlyAdded nA where nA.SamAccountName = T.SamAccountName) 
+0

我只想返回添加的用戶..i.e。出兩個報告(或範圍日期)之間的增量。 – user1978735

+0

對不起,還不清楚。 – Naomi

+0

不用擔心。指數有所幫助。我現在應該很好。 – user1978735

1
SELECT SamAccountName, MIN(ReportDate)      
FROM tbl_All_Users 
GROUP BY SamAccountName 
HAVING MIN(ReportDate) BETWEEN '1/7/2013' AND '1/21/2013' 
+0

我會運行這個來看看這是否提供我所需要的。 – user1978735

1

您還可以查看查詢計劃,看看最大的成本,這也可能表明,可以提高特定查詢新的索引。數據庫調優顧問將更進一步,並建議更多的統計數據。請注意,額外的索引通常會增加插入和更新的成本。

相關問題