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.

1voto

klkitchens Punkte 1190

Gonna erhalten slammed für diese, aber ich tue ein Select *, weil fast alle meine Daten aus SQL Server-Ansichten, die benötigte Werte aus mehreren Tabellen in einer einzigen leicht zugänglichen Ansicht vorkombinieren retrived ist.

Ich möchte dann alle Spalten aus der Ansicht, die sich nicht ändern, wenn neue Felder zu den zugrunde liegenden Tabellen hinzugefügt werden. Dies hat den zusätzlichen Vorteil, dass ich ändern kann, woher die Daten kommen. FeldA in der Ansicht kann auf einmal berechnet werden und dann kann ich es ändern, um statisch zu sein. In jedem Fall liefert die Ansicht FeldA an mich.

Das Schöne daran ist, dass meine Datenschicht dadurch Datensätze erhalten kann. Sie übergibt diese dann an meine BL, die daraus Objekte erstellen kann. Meine Hauptanwendung kennt nur die Objekte und interagiert mit ihnen. Ich erlaube meinen Objekten sogar, sich selbst zu erstellen, wenn eine Datenreihe übergeben wird.

Natürlich bin ich der einzige Entwickler, also hilft das auch :)

1voto

Dela Punkte 400

Wenn alle Spalten, die Sie auswählen, in einem Index enthalten sind, wird Ihre Ergebnismenge aus dem Index gezogen, anstatt zusätzliche Daten aus SQL abzurufen, um zu ergänzen, was alle anderen gesagt haben.

1voto

SELECT * ist notwendig, wenn man Metadaten wie die Anzahl der Spalten erhalten möchte.

0voto

bkaid Punkte 50360

Le site SELECT * könnte wäre in Ordnung, wenn Sie tatsächlich alle Spalten bräuchten - aber Sie sollten sie trotzdem alle einzeln auflisten. Sie sollten auf keinen Fall alle Zeilen aus einer Tabelle auswählen - selbst wenn sich die Anwendung und die DB auf demselben Server oder im selben Netzwerk befinden. Die Übertragung aller Zeilen wird Zeit in Anspruch nehmen, insbesondere wenn die Anzahl der Zeilen wächst. Sie sollten zumindest eine Where-Klausel haben, die die Ergebnisse filtert, und/oder die Ergebnisse auslagern, um nur die Teilmenge der Zeilen auszuwählen, die angezeigt werden müssen. Je nach verwendeter Anwendungssprache gibt es mehrere ORM-Tools, die bei der Abfrage und dem Ausblenden der benötigten Teilmenge von Daten helfen. In .NET helfen Ihnen zum Beispiel Linq to SQL, Entity Framework und nHibernate dabei.

0voto

HLGEM Punkte 91543

Ich sehe, dass mehrere Leute der Meinung sind, dass es viel länger dauert, die Spalten zu spezifizieren. Da man die Spaltenliste vom Objektbrowser herüberziehen kann, dauert es vielleicht eine Minute länger, die Spalten in der Abfrage anzugeben (wenn man viele Spalten hat und einige Zeit damit verbringen muss, sie in separate Zeilen zu setzen). Warum glauben die Leute, dass das so zeitaufwendig ist?

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