2012-03-15 58 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個字節。你的結果集可能會比這更大。

相關問題