1

私は、次のような tsql クエリで何がより速く実行され、その望ましい条件を知りたいと思います。

select case 'color' when 'red' then 1 when 'blue' then 2 else 3 end

または、データベースから値を取得した後、C# コードで同じスイッチを実行しますか?

switch(color):
{
   case "red":
      return 1;
   case "blue":
      return 2;
   default:
      return 3;
}

私の特定のケースでさらにデータを追加するには、場合によっては 5800 件以上のレコードを返す SQL クエリがあり (日付フィルターなど)、それらの結果を c# で連結し (レコードごとに 1 つの txt 行)、txt を生成します。

SQLサーバー+ Webサーバー(asp.net)であるサーバーが1つあり、それを生成するのに10分以上かかります...したがって、SQL側ですべての条件を実行することを考えて、フィールドを1つに連結する可能性がありますSQL レベルでも StringBuilder で c# ループを使用するのと比較しますか?

現在、SQL の実行には 1 秒かかり、常に連結ループで実行されます。それぞれ 11 フィールドを持つ 5873 レコードがあります。

4

3 に答える 3

1

時期尚早に最適化していると思います。「それを機能させ、正しくし、そして速くする。」

この声明(および同様の声明)が多くの議論を引き起こしていることは知っていますが、このロジックを最も適切なレイヤーに配置する必要があると思います。その時点でパフォーマンスの問題が発生した場合は、独自の負荷を使用して環境で実際の測定を行うことができます。

例として、このようなネイキッド スイッチ (維持する必要がある) ではなく、おそらくこれを DB のルックアップ テーブルに配置し、結合で戻すか、または、列挙。これらは従うべきより良いパターンかもしれません。

于 2012-04-10T15:16:57.960 に答える
0

未知の要因が多すぎるため、それを言うことは実際には不可能です。

たとえば、データベースから返すデータの量、返されたデータの処理方法、データベースサーバーとアプリケーションサーバーのどちらが容量に余裕があるかによって異なります。

それswitch自体は、よりも高速ですがselect、データベースから文字列の代わりに数値を返す方がコードで処理する方が高速であるという事実によって、それを簡単に上回ることができます。

于 2012-04-10T15:15:17.757 に答える
0

プロセッサ上ですべてが同じ場合、パフォーマンスはおそらくワークロードと帯域幅に大きく依存することになります。

文字列を整数に置き換えるか、単に整数列を追加することで、帯域幅を節約しますか? 行をフィルタリングして、ネットワークを通過するデータが大幅に減少することはありますか?

2 つの Web サーバーと 1 つの SQL サーバーがある場合、プロセッサの作業は Web サーバーで行うことで分割されます。何千ものリッチ クライアントと 1 つの SQL サーバーがある場合、プロセッサの作業はクライアントで実行することで完全に分散されます。

于 2012-04-10T15:13:18.320 に答える