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

Sql 优化0ms查询(或提前优化)?,sql,performance,optimization,Sql,Performance,Optimization,在开发的最后阶段,我开始研究代码,试图找出一些不好的做法。我发现在访问一个页面时,我查询DB n次(n是HTML表的行数),只是为了得到给定记录的翻译(不同语言)。。。我立即认为这是不好的,我尝试了一个小的优化 运行SQL探查器表明这些查询花费了0毫秒 由于我查询的这些表很小(20-100条记录),我想我可以获取所有数据并将它们缓存到web服务器RAM中,稍后使用LINQ to对象进行检索。这种方式的执行时间也是0毫秒 我运行这些测试的环境是同一台机器上负载为0%的DB和Web服务器。只有我在使

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

运行SQL探查器表明这些查询花费了0毫秒

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

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

问题从这里开始。既然我没有任何性能差异我应该避免这种优化吗?我是否应该让它平衡DB和web服务器的使用(在生产环境中,服务器将位于两台不同的机器上)

在我看来,这种优化不会损害性能,它只能使一些更好的情况下,重载数据库。我脑子里有个想法,如果没有必要,优化是错误的


谢谢你的意见。

我认为你实际上没有表现出任何性能差异

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

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

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

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

SQL Server在这方面有点奇怪,0到15毫秒之间的所有查询执行时间都被四舍五入到0毫秒。因此,通过查看数字,您实际上不知道查询的执行时间是0毫秒还是15毫秒。执行1000*1毫秒的查询与执行1000*15毫秒的查询有很大区别

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

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

两个答案都是正确的

实际上,我按照乔恩的建议测量了100万次,事实上……这是一个巨大的差异!谢谢你,乔恩

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

谢谢大家