【问题标题】:Fetching records from database从数据库中获取记录
【发布时间】:2011-05-29 15:44:40
【问题描述】:

在我的 C# 3.5 应用程序中,代码执行以下步骤:

1.遍历一个集合[长度为10]

2.对于步骤1中的每一项,通过执行存储过程从oracle数据库中获取记录[这里,记录数通常为100]

3.处理步骤 2 中获取的项目。

4.转到步骤 1 中的下一项。

我的问题是关于性能,在第 2 步中获取所有项目是否是个好主意[即。 10 * 100=1000 条记录],而不是在每一步都连接到数据库并检索 10 条记录?

谢谢。

【问题讨论】:

  • 你能解析出你的 WRT 的 TLA 吗?

标签: c# performance oracle


【解决方案1】:

是的,这是一个非常好的主意。数据库性能的关键是尽可能多地批量运行操作。

例如,仅考虑 PL/SQL 和 SQL 之间的交互。这两种语言在同一台服务器上运行并且非常彻底地集成在一起。然而,当我减少或消除两者之间的任何交互时,我通常会看到一个数量级的性能提升。我确信同样的事情也适用于应用程序和数据库之间的交互。

尽管记录的数量可能很少,但扩展您的操作是一个很好的习惯。这不是过早的优化,而是一种最佳实践,可以为您以后节省大量时间和精力。

【讨论】:

    【解决方案2】:

    通常最好在一次存储过程调用中从数据库中提取所有记录。

    当存储过程调用长时间运行或以其他方式扩展到足以导致表争用时,会出现这种情况。但是,在您的情况下,只有 1000 条记录,我怀疑这将是一个问题。

    【讨论】:

      【解决方案3】:

      根据连接步骤的强度,一次获取所有记录可能会更好。但是,请记住,过早的优化是万恶之源。 :-)

      【讨论】:

        【解决方案4】:

        是的,它稍微好一点,因为您将失去连接到数据库的开销,但您仍然会有 10 个存储过程调用的开销。如果你能找到一种方法将所有 10 项作为参数传递给存储过程并只执行一个存储过程调用,我认为你会获得更好的性能。

        【讨论】:

          猜你喜欢
          • 2013-01-27
          • 1970-01-01
          • 2021-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-05
          • 1970-01-01
          相关资源
          最近更新 更多