2012-03-15 29 views
1

我习惯于使用一个stringbuilder来建立一个Sql语句来执行,因为这样可以让我在代码中保持格式化和可读的语句。然而,它可以产生一种效率低下的语句大量额外空白:在执行它们之前,我应该从SQL语句中调整空白吗?

sb.AppendLine (@"SELECT DISTINCT *"); 
sb.AppendLine (@" FROM ( SELECT col1"); 
sb.AppendLine (@"     , col2"); 
sb.AppendLine (@"     , col3 "); 
sb.AppendLine (@"     , col4"); 
sb.AppendLine (@"    FROM (SELECT *"); 
sb.AppendLine (@"      FROM TABLE)"; 
sb.AppendLine (@"    WHERE col5= col1 "); 
sb.AppendLine (@"    AND col6 = col2 "); 
sb.AppendLine (@"   GROUP BY col1"); 
sb.AppendLine (@"     , col2"); 
sb.AppendLine (@" ORDER BY col3"); 

这个SQL是问题的一个例子,甚至可能不正确。

在我将它传递给一个要执行的命令对象之前,我应该从这里除去空白吗?或者命令会自己做,或者这只是一个不值得考虑的微观优化?

+0

我不认为有可衡量的差异。 – 2012-03-15 15:47:20

+0

@juergend - 这取决于很多因素。每秒如果你的服务器被100次查询命中,该怎么办?我敢打赌它变得可衡量。 * [是的,这确实发生在实时环境中。不,我怀疑它适用于这里;)] * – MatBailie 2012-03-15 15:54:09

+2

*咳嗽*存储过程*咳嗽* – onedaywhen 2012-03-15 16:16:13

回答

8

这是我声明我的SQL查询代码:

string query = @" 
    select columns 
    from table 
    where condition = 1 
"; 

这里有利弊:

  • 方式更好的可读性,没有杂乱
  • 我可以很容易地复制SQL块到SQL客户端工具/从一个SQL客户端工具
  • 版本控制比较工具将很容易地告诉我查询中只改变了什么。

没有缺点到目前为止:)

更新

哦,是的,我认为担心多余的空格是过度优化。

+0

缺点 - 甚至更多的空白:) – 2012-03-15 16:10:00

+0

@SamHolder这将是真实的(作为一个骗局)** IF **有白色空格将会对性能产生任何影响。我会说它很少**会有**实质性影响*。在你做到这一点之前,你应该已经在应用程序中发现了许多**其他瓶颈。你微微担心。说真的,通过让你的代码更具可读性,你会获得更多的收益:) – 2012-03-15 16:13:48

+0

是的,我和你在一起@阿德里安似乎对我来说是一个不必要的步骤,但是它前几天出现在代码审查中,所以我想看看更宽社区思想。我想我会切换到您的字符串文字样式的SQL虽然。谢谢。 – 2012-03-15 16:42:24

2

正如你所说,我认为你是过度优化。你说的可能是100个字节。你的结果集可能会比这更大。

相关问题