Soll ich SQL-Abfragen in verschiedene Zeilen aufteilen? Zum Beispiel haben wir in dem Projekt, an dem ich arbeite, eine Abfrage, die 1600 Spalten belegt! 1600 + Tabulatoren. Ich habe Fragen wie diese geschrieben:
"SELECT bla , bla2 , bla FROM bla " .
"WHERE bla=333 AND bla=2" .
"ORDER BY nfdfsd ...";
Aber sie forderten mich auf, sie in eine Zeile zu setzen und meinten, mein Stil sei schlecht formatiert. Warum ist es schlechte Praxis?
sql
code-formatting
GorillaApe
quelle
quelle
.
) zu verwenden, die einige Programmierer für die Leistungskosten verantwortlich gemacht haben.Antworten:
Aus Gründen der Quellcodeverwaltung werden nach jeder WHERE-Klausel oder nach jedem Komma Zeilenumbrüche angezeigt. So wird Ihr oben in
(Tab und Alignment haben hier keinen Standard, aber Kommas sind normalerweise führend)
Trotzdem macht das keinen Leistungsunterschied.
quelle
Eine Abfrage mit 1600 Spalten muss von einem guten Datenbankadministrator gründlich überprüft werden.
Wenn eine Abfrage komplex ist, werde ich sie umbrechen. Wenn es einfach ist, lasse ich es als einzelne Zeile, es sei denn, es wird zu lang, dann beginne ich erneut, es umzubrechen.
Es geht nur um die Verwaltbarkeit und darum, zu verstehen, was zu tun ist. Das Umschließen oder Nicht-Umschließen kann im Handumdrehen entschieden werden, es sei denn, Ihre Organisation verfügt über einige Regeln zur Code-Formatierung.
Betreff: Schlechte Codierpraxis. Kaum! Es ist eine sehr gute Übung. Ich kenne keine guten Gründe, eine Abfrage so lange zu verwenden, und es gibt viele gute Gründe, sie neu zu formatieren. Wie ich bereits sagte, muss ein erfahrener DBA wahrscheinlich daran arbeiten.
quelle
Der einzige Vorteil von einzeiligen Abfragen, der in den Sinn kommt, besteht darin, dass diese Abfragen möglicherweise etwas einfacher zu finden sind. Davon abgesehen bin ich jedoch ratlos. Persönlich bevorzuge ich die besser lesbaren, aufgeteilten Abfragen.
quelle
Mehrzeilige Kommentare sind gut und fast unverzichtbar, wenn große Mengen von SQL verarbeitet werden. Und wenn Ihre Programmiersprache Heredoc-Anführungszeichen enthält, ist dies sogar noch besser (da viele Editoren die SQL-Syntax in diesen hervorheben können).
Beispiel:
Wenn Sie mit Abfragen von Dutzenden von Zeilen (oder Hunderten von Zeilen) arbeiten, können Sie den Text sowohl durch Einrückungen als auch durch Leerzeichen bearbeiten.
quelle
Anscheinend geht es hier speziell darum, eine große Abfrage in einer Art Programmiersprache zu definieren, indem Sie die Abfrage in ein Zeichenfolgenliteral einfügen und es verketten.
Wenn es sich um eine kompilierte Sprache handelt, sollte dies überhaupt keinen Unterschied machen. Eine der ersten Optimierungen, die der Compiler vornehmen würde, besteht darin, die Zeichenfolgenliterale automatisch miteinander zu verknüpfen, sodass Sie sowieso eine große Zeichenfolge erhalten.
In Bezug auf die Syntax sollten Sie tatsächlich in Betracht ziehen, die Abfrage aus Ihrem Code heraus zu verschieben. Speichern Sie sie in einer separaten SQL-Ressourcendatei, und lassen Sie Ihre Software diese Datei lesen. Verwenden Sie vorbereitete Anweisungen für die Variablen, wenn es sich nicht um eine dynamisch erstellte Abfrage handelt (z. B. WHERE-Klauseln usw., die abhängig von bestimmten Parametern hinzugefügt werden). Wenn es dynamisch erstellt wird, können Sie eigene Ersatzvariablen hinzufügen und bei Bedarf zusätzliche Parameter einfügen.
Was die 1600 Spalten betrifft, empfehle ich ernsthaft, eine Ansicht dafür zu erstellen, und nicht
du würdest bekommen
SELECT * FROM viewX WHERE y
Viel prägnanter in Ihrem eigenen Code.
quelle
Ich verwende oft das von @glasnt angegebene Format, um eine komplizierte Abfrage zu beheben, habe jedoch normalerweise Abfragen in einer einzigen Zeile.
Dies könnte Ihre Frage nicht beantworten, aber ich würde auch dringend empfehlen, Ihre Anfrage in kleinere Anfragen zu unterteilen. Dies hängt natürlich von der Abfrage ab. Je mehr Klauseln und Verknüpfungen Sie Ihrer Abfrage hinzufügen, desto weniger kann die SQL-Engine Ihre Abfrage optimieren.
Ihr Datenbankanbieter sollte über Tools wie EXPLAIN von MySQL (oder die Einstellung SHOWPLAN_ALL von MSSQL) verfügen, die Ihnen zeigen, was die Datenbank hinter den Kulissen tut, um Ihre Abfrage zu optimieren, jedes Mal, wenn die Datenbank eine temporäre Tabelle erstellen muss, oder solche, die Sie hinzufügen große Verzögerungen, wenn Sie über mehrere gleichzeitige Benutzer sprechen.
Indem Sie die scheinbar triviale Logik aus dem SQL-Code in den Code verschieben, können Sie die Leistung erheblich steigern. SQL eignet sich hervorragend für einfache Vorgänge.
Der offensichtliche Vorteil, den dies für Sie haben könnte, ist, dass Ihre Abfragen viel weniger komplex und einfach zu lesen sind - einfach zu verwalten (nicht> 1600 Spalten) und schneller. Auf jeden Fall ein Allround-Sieg.
Hoffe das hilft :)
quelle