我的表中有超过3百万行。当用户尝试插入或更新此表我要检查的条件依次如下。(业务需求)SQL Server 2008中的匹配算法
- 是否有该行的具有相同的地址?
- 是否有任何行具有相同的邮政编码?
- 是否有任何行具有相同的DOB?
显然,新插入或更新的行将匹配该表中的大量记录。
但业务需求是,匹配过程应该在找到第一个匹配(行)并且该行必须返回时结束。
我可以使用简单的“SELECT”查询轻松实现此目的。但是找到比赛需要很长时间。
请建议一些有效的方法来做到这一点。
我的表中有超过3百万行。当用户尝试插入或更新此表我要检查的条件依次如下。(业务需求)SQL Server 2008中的匹配算法
显然,新插入或更新的行将匹配该表中的大量记录。
但业务需求是,匹配过程应该在找到第一个匹配(行)并且该行必须返回时结束。
我可以使用简单的“SELECT”查询轻松实现此目的。但是找到比赛需要很长时间。
请建议一些有效的方法来做到这一点。
如果您只是在第一场比赛后寻找回报方式,请使用LIMIT 1
。
您可能希望维护出生日期或邮编的表格,并将每一行都链接到用户,以便您可以轻松地将客户过滤到较小的集合。它可以让你在数据库上执行更快的搜索。
例子:
dob | userID
1/1/1980 | 235
1/1/1980 | 482
1/1/1980 | 123
2/1/1980 | 521
在这种情况下,你只需要从大的用户表读3行,如果你的目标日期为1980年1月1日。它也是通过主键索引,所以它会非常快。
SQL Server没有LIMIT子句! –
真的吗?这很糟糕。我想你可以限制'WHERE id> = 0 AND id <10000',然后'WHERE id> = 10000 AND id <20000'等等,直到你得到一行。无论如何,我的其余建议仍然存在。 – Polynomial
它的确吸吮!您可以使用ROW_NUMBER()函数来模拟功能。 –
UNIQUE约束和适当的异常处理? –
你是否在这些领域的表上编制索引? – MrTheWalrus
对于快速选择,您需要将所有这些字段(地址,邮政编码,DOB)编入索引,否则您将对每个字段执行全表扫描。 –