【问题标题】:Optimize lots of queries优化大量查询
【发布时间】:2010-07-22 08:02:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net sql-server performance


    【解决方案1】:

    如果您使用的是 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 上也有很多关于“如何将多个值传递给存储过程”的讨论。或者,将十进制值批量加载到临时表中,然后加入该表。

    【讨论】:

      【解决方案2】:

      SQL Server 2008 引入了table value parameters。您可以将define它们作为用户类型参数并将它们传递给存储过程和UDF(使用UDF,它们需要只读)。

      您可以编写一个存储过程,该过程接受一个小数表,进行查找并返回您需要的数据,所有这些都在一个查询中完成。

      【讨论】:

        【解决方案3】:

        如果值不经常更改,请在它之前创建一个 AppFabric 分布式缓存。 这将是加快速度的最佳方式。 在我看来,将逻辑转移到存储过程通常不是实现可伸缩性的最佳方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-25
          • 2015-10-24
          相关资源
          最近更新 更多