2013-03-10 90 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 

這應該是足夠快。