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?
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:
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.
CASE
-Anweisungen werden bevorzugt, weil:
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).
Sie sollten die Daten in der Datenbank abfragen (filtern und sortieren) und die Präsentation der Präsentationsebene überlassen. Dies hat zwei Hauptgründe:
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. Ссылка
Tags und Links sql asp-classic case-statement