2011-11-04 97 views
2

我的表中有超過3百萬行。當用戶嘗試插入或更新此表我要檢查的條件依次如下。(業務需求)SQL Server 2008中的匹配算法

  1. 是否有該行的具有相同的地址?
  2. 是否有任何行具有相同的郵政編碼?
  3. 是否有任何行具有相同的DOB?

顯然,新插入或更新的行將匹配該表中的大量記錄。

但業務需求是,匹配過程應該在找到第一個匹配(行)並且該行必須返回時結束。

我可以使用簡單的「SELECT」查詢輕鬆實現此目的。但是找到比賽需要很長時間。

請建議一些有效的方法來做到這一點。

+2

UNIQUE約束和適當的異常處理? –

+0

你是否在這些領域的表上編制索引? – MrTheWalrus

+0

對於快速選擇,您需要將所有這些字段(地址,郵政編碼,DOB)編入索引,否則您將對每個字段執行全表掃描。 –

回答

0

如果您只是在第一場比賽後尋找回報方式,請使用LIMIT 1

您可能希望維護出生日期或郵編的表格,並將每一行都鏈接到用戶,以便您可以輕鬆地將客戶過濾到較小的集合。它可以讓你在數據庫上執行更快的搜索。

例子:

dob  | userID 
1/1/1980 | 235 
1/1/1980 | 482 
1/1/1980 | 123 
2/1/1980 | 521 

在這種情況下,你只需要從大的用戶表讀3行,如果你的目標日期爲1980年1月1日。它也是通過主鍵索引,所以它會非常快。

+0

SQL Server沒有LIMIT子句! –

+0

真的嗎?這很糟糕。我想你可以限制'WHERE id> = 0 AND id <10000',然後'WHERE id> = 10000 AND id <20000'等等,直到你得到一行。無論如何,我的其餘建議仍然存在。 – Polynomial

+0

它的確吸吮!您可以使用ROW_NUMBER()函數來模擬功能。 –