21

What is more efficient - handling with case statements in sql or handling the same data using if statements in code. I'm asking because my colleague has a huge query that has many case statements. I advised her to take stress off of the DB by coding the case statements. I've found that it is more efficient...but why?

4

5 に答える 5

38

ここでは問われていない、より基本的な質問があります。これらのCASEステートメントは実際に何をしているのか?

パフォーマンスを少し忘れてください。がクエリの最終出力を変換するためだけに使用されており、同じ機能を ASP 内のorCASEに置き換えることが実際に可能である場合、おそらく、データベース クエリ/プロシージャが、UI が責任を負うべきことを実行しようとしていることを意味します。フォーマットなどに。関心の分離の問題は、考えられるパフォーマンスの問題よりも深刻です。ifselect case

次のようなクエリがある場合:

SELECT InvoiceID, InvoiceDate,
    CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...

UI、またはデータからドメインへのマッピングを行うレイヤーは、データベース内のステータスを対応する説明に変換する方法を知っている必要があるため、これはばかげています。このロジックをクエリ自体に含めても意味がありません。

一方、CASEコンストラクトがクエリの重要な部分である場合は、次のようになります。

SELECT
    SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid,
    SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaid
FROM ...

データベースの方がはるかに優れているため、この種のロジックを UI に移動しようとさえしないでください。意味的にはクエリの一部であり (「 xCASEの支払済みおよび未払いの合計金額を計算する」)、UI 機能を引き継いでいるわけではありません。

最初に、ロジックが何を達成しようとしているかに基づいて、ロジックが実際にどこに属しているかを考えてください。重大なパフォーマンス上の問題に実際に気付いている場合にのみ、パフォーマンスの問題について議論する必要があります。

于 2010-03-12T05:22:13.273 に答える
9

CASE次の理由により、ステートメントが推奨されます。

  • SQL: ANSI 標準であり、変更する必要なく他のデータベースに移植できます。
  • 彼らは「短絡」をサポートしています
于 2010-03-11T22:38:11.847 に答える
2

私の経験では、データベース サーバーはアプリケーション サーバーよりもはるかに大きく、通常は 30% 未満のアイドル状態になっています。データベースにデータを管理させてから、クライアントに結果セットを反復処理させます。データベースが必要なデータのみを返すようにすることをお勧めします (これを前もって判断できる場合)。

于 2010-03-11T22:37:16.267 に答える
1

データベース内のデータをクエリ (フィルター処理および並べ替え) し、プレゼンテーション層にプレゼンテーションを任せる必要があります。これには、次の 2 つの主な理由があります。

  • データベースは、データをフィルタリングおよびソートするために作られています
  • 必要に応じて、DB からワイヤー経由で最小限のデータをプルしたい
于 2010-03-11T22:38:46.773 に答える
1

私が読んだように、ここでの基本的な質問は、CASE が SQL の IF よりも優れているかどうかです。答えは、条件の深さにも依存します。ここで良い記事を見つけました。誰かに役立つかもしれません。 http://www.4guysfromrolla.com/webtech/102704-1.shtml

于 2014-01-08T22:52:33.220 に答える