优化大量查询

时间:2010-07-22 08:02:24

标签: .net sql-server performance

我有一个超过3,000个十进制值的列表,每个我需要从SQL Server数据库中查找另一个十进制值。目前我正在使用.Net SqlClient类 制作3,000个查询似乎效率低下,但我不确定是否有一种将查询组合成几个调用的简洁有效方法。

查找表当前包含大约1,500,000个值,我不想从数据库中检索任何值,除了那些实际需要查找的值(因此我无法将整个表缓存在内存中等)。

这样做的最佳方法是什么?

3 个答案:

答案 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。 这将是加快速度的最好方法。 在我看来,将逻辑移动到存储过程通常不是可扩展性的最佳方式。