【问题标题】:Optimize 0ms query (or optimizing ahead)?优化 0ms 查询(或提前优化)?
【发布时间】:2009-01-29 08:36:07
【问题描述】:

在开发的最后阶段,我开始查看代码,试图找出一些不好的做法。我发现在访问页面时,我查询数据库 n 次(n 是 HTML 表的行数)只是为了获取给定记录的翻译(不同语言)......我立即认为这很糟糕我尝试了一个小的优化。

运行 SQL 分析器显示这些查询花费了 0 毫秒。

由于我要查询的这些表很小(20-100 条记录),我想我可以获取所有数据并将它们缓存到 Web 服务器 RAM 中,稍后使用 LINQ to Objects 检索。这种方式的执行时间也是0ms。

我运行这些测试的环境是同一台机器上负载为 0% 的数据库和 Web 服务器。只有我在使用该应用程序。

问题从这里开始。由于我根本没有性能差异,我应该避免这种优化吗?我是否应该保持平衡以平衡 DB 和 Web 服务器的使用(服务器将在生产环境中的 2 台不同的机器上)?

在我看来,这种优化不会损害性能,它只会在负载较重的数据库的情况下变得更好。我脑子里有个东西说如果没有必要优化是错误的......

感谢您的意见。

【问题讨论】:

    标签: sql performance optimization


    【解决方案1】:

    我认为您实际上并没有证明根本没有性能差异。

    尝试以每种方式运行查询一百万次,并计算总共需要多长时间......我想你会看到很大的不同。

    SQL 分析器仅向您显示(据我所知)在数据库上 执行查询所花费的时间。不考虑:

    • 建立连接或准备查询所用的时间
    • 发出查询的网络延迟时间
    • 返回结果的网络延迟时间
    • 将结果转换为有用对象所花费的时间。

    当然,一般来说,过早的优化是一件坏事,但这听起来确实是一个合理的改变——如果你知道表格的内容不会改变。

    【讨论】:

      【解决方案2】:

      SQL Server 在这方面有点特殊,0 到 15 毫秒之间的所有查询执行时间都向下舍入到 0 毫秒。因此,如果您的查询花费了 0 毫秒或 15 毫秒,您实际上并不能通过查看数字来知道。执行 1000 * 1 ms 查询和执行 1000 * 15 ms 之间有很大的不同。

      关于翻译,我发现最好的方法是使用资源并将它们绑定到 SQL 数据库并在 Web 应用程序中缓存翻译一段合理的时间。这是相当有效的。

      除此之外,Jon Skeet 所说的... :)

      【讨论】:

        【解决方案3】:

        两个答案都是正确的。

        我实际上按照 Jon 的建议测量了 100 万次,事实上......有很大的不同!谢谢乔恩

        甚至乔纳斯所说的都是真的。即使 sql profiler 显示为 0,该查询实际上也花费了大约 15 毫秒(由程序测量)。

        谢谢大家!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-15
          相关资源
          最近更新 更多