Case Statements versus codierte if-Statements

7

Was effizienter ist - die Behandlung von case-Anweisungen in sql oder die Behandlung derselben Daten mit if-Anweisungen im Code. Ich frage, weil mein Kollege eine riesige Abfrage hat, die viele Fallanweisungen enthält. Ich riet ihr, die DB durch Kodieren der Case Statements zu stressen. Ich habe festgestellt, dass es effizienter ist ... aber warum?

    
Eric 11.03.2010, 22:32
quelle

5 Antworten

19

Es gibt eine grundlegendere Frage, die hier nicht gestellt wird: Was machen diese CASE -Anweisungen eigentlich?

Vergessen Sie die Leistung für eine Minute. Wenn CASE nur verwendet wird, um die endgültige Ausgabe einer Abfrage zu transformieren, und es tatsächlich möglich ist, die gleiche Funktionalität durch ein if oder select case in ASP zu ersetzen, dann bedeutet dies wahrscheinlich, dass die Datenbankabfrage / -prozedur versucht Dinge zu tun, für die die Benutzeroberfläche zuständig sein sollte, z. B. Formatierung. Das Problem der Trennung der Probleme ist schwerwiegender als jedes mögliche Leistungsproblem.

Wenn Sie eine solche Abfrage haben:

%Vor%

Das ist nur albern, weil die UI oder welche Schicht die Daten-zu-Domäne-Zuordnung wissen sollte, wie man einen Status in der Datenbank in die entsprechende Beschreibung konvertiert. Es macht keinen Sinn, diese Logik in die Abfrage selbst aufzunehmen.

Andererseits, wenn das CASE -Konstrukt ein wesentlicher Teil der Abfrage ist, wie:

%Vor%

Versuchen Sie nicht einmal, diese Art Logik in die Benutzeroberfläche zu verschieben, weil die Datenbank viel besser darin ist. Und das CASE ist semantisch ein Teil der Abfrage ("Berechne die gesamten bezahlten und unbezahlten Beträge für x "), es übernimmt keine UI-Funktion.

Machen Sie sich zuerst Gedanken darüber, wo die Logik tatsächlich hingehört, basierend auf dem, was sie erreichen will. Performance-Bedenken sollten nur dann in die Diskussion eingehen, wenn Sie tatsächlich bemerkenswerte Performance Probleme bemerken.

    
Aaronaught 12.03.2010, 05:22
quelle
5

CASE -Anweisungen werden bevorzugt, weil:

  • SQL: Sie sind ANSI-Standard, so dass sie ohne Änderung in andere Datenbanken portierbar sind
  • sie unterstützen "Kurzschlüsse"
OMG Ponies 11.03.2010 22:38
quelle
2

Nach meiner Erfahrung sind unsere Datenbankserver viel größer als unsere Anwendungsserver und sitzen normalerweise unter 30% Leerlauf. Lassen Sie die Datenbank von der Datenbank verwalten und lassen Sie den Client dann durch das resultSet iterieren. Es ist besser, wenn die Datenbank nur die Daten zurückgibt, die Sie benötigen (wenn Sie dies im Voraus bestimmen können).

    
northpole 11.03.2010 22:37
quelle
1

Sie sollten die Daten in der Datenbank abfragen (filtern und sortieren) und die Präsentation der Präsentationsebene überlassen. Dies hat zwei Hauptgründe:

  • Datenbanken werden zum Filtern und Sortieren von Daten erstellt
  • Sie möchten bei Bedarf die geringste Menge an Daten über die Leitung aus der Datenbank abrufen
Keith Adler 11.03.2010 22:38
quelle
0

Wie ich gelesen habe, ist hier die grundlegende Frage, ob CASE besser ist als IF in SQL. Die Antworten hängen auch von der Tiefe Ihrer Bedingungen ab. Habe hier einen guten Artikel gefunden. Kann für jemanden nützlich sein. Ссылка

    
Ram Dwivedi 08.01.2014 22:52
quelle

Tags und Links