2012-03-15 15 views
1

私は実行するSQL文を構築するためにstringbuilderを使用するのが習慣的です。しかし、それは余分な空白がたくさんで非効率的な文を生成することができます:実行前に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

私は測定可能な違いはないと思います。 –

+0

@juergend - それは多くの要素に依存します。あなたのサーバーが100秒のクエリで1秒間ヒットしている場合はどうなりますか?私はそれが測定可能になると確信しています。 * [はい、これはリアルタイム環境で発生します。 )* – MatBailie

+2

*咳*ストアドプロシージャ*咳* – onedaywhen

答えて

8

これは私がコードで私のSQLクエリを宣言する方法を示します。ここでは

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

は長所は、以下のとおりです。

  • ウェイ読みやすく、ノー混乱
  • 私は簡単にSQLブロックをコピーすることができますSQLクライアントツールとの間で//
  • バージョンコントロール差分ツールは、クエリで変更された内容を簡単に表示します。

これまでにない短所:)

更新

ああ、そして、はい、私は余分な空白を心配する上での最適化だと思います。

+0

短所:より多くの空白:) –

+0

@SamHolderそれは真実である(詐欺)** IF **の空白を持つことはパフォーマンスに影響を与えます。私は非常にめったに**どんな*実質的な影響も*ないと言いたいと思います。あなたもそれに着手する前に、あなたのアプリケーションで**多くの他のボトルネックを見つけたはずです。あなたはマイクロを心配しています。真剣に、あなたのコードをより読みやすくすることによって、もっと多くを得るでしょう:) –

+0

ええ、私はあなたと一緒です@Adrianは私にとって不必要なステップのようですが、コードレビューで先日登場しましたので、コミュニティの考え。私はSQLのあなたの文字列リテラルスタイルに切り替えると思う。ありがとう。 –

2

あなたがすでに述べたように、あなたは過度に最適化していると思います。多分あなたは100バイトかもしれません。結果セットはおそらくそれより大きいでしょう。

関連する問題