209 Stimmen

Was ist schneller/bester? SELECT * oder SELECT Spalte1, Spalte2, Spalte3, usw.

Ich habe gehört, dass SELECT * beim Schreiben von SQL-Befehlen zu verwenden, da es effizienter ist, die SELECT Spalten, die Sie speziell benötigen.

Wenn ich es brauche SELECT jede Spalte in einer Tabelle, sollte ich

SELECT * FROM TABLE

o

SELECT column1, colum2, column3, etc. FROM TABLE

Spielt die Effizienz in diesem Fall wirklich eine Rolle? Ich würde denken SELECT * wäre intern optimaler, wenn Sie wirklich alle Daten benötigen, aber ich sage das, ohne wirklich etwas von Datenbanken zu verstehen.

Ich bin neugierig, was in diesem Fall die beste Praxis ist.

UPDATE: Ich sollte vielleicht präzisieren, dass die einzige Situation, in der ich wirklich wollen um eine SELECT * ist, wenn ich Daten aus einer Tabelle auswähle, von der ich weiß, dass immer alle Spalten abgerufen werden müssen, auch wenn neue Spalten hinzugefügt werden.

In Anbetracht der Reaktionen, die ich gesehen habe, scheint dies jedoch immer noch eine schlechte Idee zu sein und SELECT * sollte aus viel mehr technischen Gründen, als ich je bedacht habe, niemals verwendet werden.

0voto

Sam Cogan Punkte 3874

Ich finde die Auflistung von Spaltennamen besonders wichtig, wenn andere Entwickler mit dem Code arbeiten oder sich die Datenbank ändern könnte, damit Sie immer konsistente Daten erhalten.

0voto

Cade Roux Punkte 85601

Es gibt Fälle, in denen SELECT * zu Wartungszwecken sinnvoll ist, aber im Allgemeinen sollte es vermieden werden.

Dies sind spezielle Fälle wie Views oder Stored Procedures, bei denen Sie möchten, dass Änderungen in den zugrundeliegenden Tabellen weitergegeben werden, ohne dass Sie alle Views und Stored Procedures, die die Tabelle verwenden, ändern müssen. Selbst dann kann dies zu Problemen führen, wie z.B. in dem Fall, dass Sie zwei Views haben, die verbunden sind. Eine zugrundeliegende Tabelle ändert sich und nun ist der View mehrdeutig, weil beide Tabellen eine Spalte mit demselben Namen haben. (Beachten Sie, dass dies immer dann passieren kann, wenn Sie nicht alle Spalten mit Tabellenpräfixen kennzeichnen). Selbst mit Präfixen, wenn Sie ein Konstrukt haben wie:

WÄHLEN SIE A. , B. - kann es zu Problemen kommen, wenn der Kunde nun Schwierigkeiten hat, das richtige Feld auszuwählen.

Im Allgemeinen verwende ich SELECT * nicht, es sei denn, ich treffe eine bewusste Designentscheidung und rechne damit, dass die damit verbundenen Risiken gering sind.

0voto

cazlab Punkte 787

Definieren Sie unbedingt die Spalten, die Sie jedes Mal AUSWÄHLEN wollen. Es gibt keinen Grund, dies nicht zu tun, und die Leistungsverbesserung ist es allemal wert.

Sie hätten niemals die Option "SELECT *" anbieten dürfen.

0voto

DamienG Punkte 6405

Wenn Sie jede Spalte benötigen, verwenden Sie einfach SELECT *, aber denken Sie daran, dass sich die Reihenfolge möglicherweise ändern kann, so dass Sie beim Abrufen der Ergebnisse auf die Namen und nicht auf den Index zugreifen.

Ich würde Kommentare darüber ignorieren, wie * die Liste holen muss - die Chancen stehen gut, dass das Parsen und Validieren von benannten Spalten genauso viel Zeit in Anspruch nimmt wie die Verarbeitung, wenn nicht mehr. Optimieren Sie nicht vorschnell ;-)

0voto

Erik Punkte 3980

In Bezug auf die Ausführungseffizienz sind mir keine signifikanten Unterschiede bekannt. Aber für die Effizienz der Programmierer würde ich die Namen der Felder schreiben, weil

  • Sie kennen die Reihenfolge, wenn Sie nach Nummern indizieren müssen, oder wenn Ihr Treiber sich bei Blob-Werten komisch verhält und Sie eine bestimmte Reihenfolge brauchen
  • Sie lesen nur die Felder, die Sie benötigen, falls Sie jemals weitere Felder hinzufügen sollten
  • Sie erhalten einen SQL-Fehler, wenn Sie ein Feld falsch schreiben oder umbenennen, und nicht einen leeren Wert aus einem Datensatz/einer Zeile
  • Sie können besser lesen, was vor sich geht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X