SQL Server-更快的记录检索

SQL Server-更快的记录检索,sql,sql-server,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,我有这样一个场景:SQLServer数据库中的一个表已经有5000万行了。我们不时地批量插入行。每个批具有相同的批id和行的datetimestamp,批一次最多可以有100k行 一天中有许多批次运行。使用batchID和datetimestamp查询第一批行的最佳方式是什么 我们已经使用批处理id的min和相应的datetimestamp有一段时间了,但它似乎没有有效地运行。你能提供一些见解,看看能做些什么来让这一切变得更好吗?感谢您的回复。您应该为EDate-列添加索引,包括BatchID

我有这样一个场景:SQLServer数据库中的一个表已经有5000万行了。我们不时地批量插入行。每个批具有相同的批id和行的datetimestamp,批一次最多可以有100k行

一天中有许多批次运行。使用
batchID
datetimestamp
查询第一批行的最佳方式是什么


我们已经使用批处理id的min和相应的datetimestamp有一段时间了,但它似乎没有有效地运行。你能提供一些见解,看看能做些什么来让这一切变得更好吗?感谢您的回复。

您应该为
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

这应该足够快

请提供表结构,包括索引和可能的几行示例数据。如果datetimestamp对于批处理中的所有行都是相同的,那么我根本不明白为什么要将它存储在该表中。在这种情况下,我也不明白“第一批记录”是什么意思。创建表[Test]([batch_id][int]NOT NULL、[Claim_id][varchar](20)NOT NULL、[Transaction_id][varchar](255)NULL、[Transaction_Type][varchar 5)NOT NULL、[paymentAmount money][EDate][datetime]NULL)约束[pk Test PRIMARY-KEY-clustering([batch_id]ASC,[索赔ID]ASC、[交易ID]ASC、[交易类型]ASC)这是表结构,第一批记录是指进入表中一天的第一组100k记录。如果在每个批中,记录具有相同的batchid和datetimestamp,并且每批有100k条记录,则应为batchid和stamp创建一个表,然后FK到record table。@urlreader我同意,但现在我无法确定是变化。只是在寻找一种最佳的方式来实现我想要的。请不要将代码样本或样本数据放入注释中-因为您无法格式化它,阅读它非常困难…相反:通过编辑它来更新您的问题,以提供额外的信息!谢谢。