优化0ms查询(或提前优化)?

时间:2009-01-29 08:36:07

标签: sql performance optimization

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

运行SQL事件探查器会显示这些查询占用0毫秒。

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

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

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

在我看来,这种优化不会损坏性能,只有在重载DB的情况下才能做得更好。我的大脑中有一些东西说如果没有必要进行优化是错误的......

感谢您的意见。

3 个答案:

答案 0 :(得分:10)

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

尝试每次运行查询一百万次,并计算总计所需的时间...我认为您会看到很大的差异。

SQL探查器仅向您显示(据我所知)在数据库上执行查询所花费的时间。它没有考虑到:

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

当然,过早优化通常是一件坏事,但这听起来像是一个合理的改变 - if 你知道表的内容不会改变。

答案 1 :(得分:1)

SQL Server有点奇怪,0到15毫秒之间的所有查询执行时间都向下舍入到0毫秒。因此,如果您的查询占用0毫秒或15毫秒,您实际上并不知道该数字。执行1000 * 1 ms查询和执行1000 * 15 ms之间的差异很大。

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

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

答案 2 :(得分:0)

两个答案都是真的。

我实际测量了乔恩建议的100万次,实际上......存在巨大差异!谢谢乔恩

即使乔纳斯说的也是如此。即使sql profiler说0,查询实际上也需要大约15ms(由程序测量)。

谢谢你们!