2013-01-14 16 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

您还可以查看查询计划,看看最大的成本,这也可能表明,可以提高特定查询新的索引。数据库调优顾问将更进一步,并建议更多的统计数据。请注意,额外的索引通常会增加插入和更新的成本。

相关问题