我有一个超过3,000个十进制值的列表,每个我需要从SQL Server数据库中查找另一个十进制值。目前我正在使用.Net SqlClient
类
制作3,000个查询似乎效率低下,但我不确定是否有一种将查询组合成几个调用的简洁有效方法。
查找表当前包含大约1,500,000个值,我不想从数据库中检索任何值,除了那些实际需要查找的值(因此我无法将整个表缓存在内存中等)。
这样做的最佳方法是什么?
答案 0 :(得分:2)
如果您使用的是SQL Server 2008,则可以将表值参数传递给查询 - 传入值表,然后在查询中加入。与替代方法(CSV和XML)进行性能比较的示例:http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html
我会看到它的表现并从那里开始。
如果你没有使用SQL Server 2008,你可以尝试在那篇文章(XML然后是CSV)中比较的替代方法 - 在StackOverflow上有关于“如何将多个值传递给sproc”的讨论也很多。或者,将十进制值批量加载到临时表,然后加入该表。
答案 1 :(得分:1)
SQL Server 2008引入了table value parameters。您可以define将它们作为用户类型参数,并将它们传递给存储过程和UDF(使用UDF,它们只需要读取)。
您可以编写一个存储过程,该过程采用小数表,查找并返回您需要的数据,所有这些都在一个查询中。
答案 2 :(得分:0)
如果值不经常更改,请将AppFabric分布式缓存设置为bevore。 这将是加快速度的最好方法。 在我看来,将逻辑移动到存储过程通常不是可扩展性的最佳方式。