2013-03-10 38 views
1

我有这种情况:我们在SQL Server数据库中的一个表已经有5000万行。我们不时地批量插入行。每个批次都有相同的批次ID和日期时间戳,对于行和批次一次最多可以有100k行。SQL Server - 更快的记录检索

在一天中有许多批次运行。使用batchIDdatetimestamp查询第一批行的最佳方法是什么?

我们一直在使用min的批处理id并使用相应的datetimestamp一段时间,但它似乎没有高效运行。你能否提供一些见解,让我们可以做得更好?感谢您的回复。

+2

请提供表结构,包括索引和可能的几行示例数据。如果批处理中的所有行都是相同的,我不明白为什么要将datetimestamp存储在该表中。而且我也不明白“首批记录”在这种情况下意味着什么。 – 2013-03-10 08:28:13

+0

CREATE TABLE [试验]( [BATCH_ID] [INT] NOT NULL, [Claim_ID] [VARCHAR(20)NOT NULL, [TRANSACTION_ID] [VARCHAR](255)NULL, [TRANSACTION_TYPE] [VARCHAR( 5)NOT NULL, [paymentAmount]钱, [EDATE] [日期时间] NULL) 约束[pk_Test] PRIMARY KEY CLUSTERED ( [BATCH_ID] ASC, [Claim_ID] ASC, [TRANSACTION_ID] ASC,\t [Transaction_Type] ASC)这是表结构,第一批记录意味着第一组100k记录进入表中一天。 – UnlimitedMeals 2013-03-10 08:34:49

+1

如果在每个批次中记录具有相同的批次ID和日期时间戳,并且每个批次具有100K记录,则应为批次标识和戳记创建表格,然后使用FK记录表格。 – urlreader 2013-03-10 08:40:03

回答

0

您应该为EDate列添加一个索引,包括BatchID

create nonclustered index Index_EDate_Table 
on YourTable 
    (EDate ASC) 
include 
    (BatchID) 

然后,您可以通过查询自己的时间戳一天预订的批次为

select distinct BatchID 
    from YourTable 
    where EDate >= Cast(GetDate() as Date) 
    order by EDate 

这应该是足够快。