2011-11-04 64 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()函数来模拟功能。 –