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

Seien Sie praktisch. Verwenden Sie select * beim Prototyping und select specific columns bei der Implementierung und Bereitstellung. Aus Sicht des Ausführungsplans sind beide auf modernen Systemen relativ identisch.

Letztendlich ist es am besten, wenn Sie bestimmte Spalten auswählen.

0voto

Michael Stum Punkte 172055

Denken Sie auch an Veränderungen. Heute wählt Select * nur die Spalten aus, die Sie brauchen, aber morgen könnte es auch die varbinary(MAX)-Spalte auswählen, die ich gerade hinzugefügt habe, ohne Ihnen das mitzuteilen, und Sie erhalten jetzt auch alle 3,18 Gigabyte an Binärdaten, die gestern noch nicht in der Tabelle waren.

0voto

mikedopp Punkte 93

Denken wir darüber nach, was schneller ist. Wenn Sie nur die Daten auswählen können, die Sie benötigen, ist es schneller. Beim Testen können Sie jedoch alle Daten heranziehen, um zu beurteilen, welche Daten je nach Geschäftsanforderungen herausgefiltert werden können.

0voto

Notitze Punkte 1229

Nun, das hängt wirklich von Ihren Kennzahlen und Ihrem Zweck ab:

  1. Wenn Sie 250 Spalten haben und sie (tatsächlich) alle auswählen wollen, verwenden Sie select *, wenn Sie noch am selben Tag nach Hause kommen wollen :)
  2. Wenn Ihre Kodierung flexibel sein muss und die benötigte Tabelle klein ist, hilft Ihnen select *, schneller zu kodieren und einfacher zu pflegen.
  3. Wenn Sie robuste Technik und Leistung wünschen:
    • die Namen der Spalten zu schreiben, wenn es nur wenige sind, oder
    • ein Tool zu schreiben, mit dem Sie Ihre Spaltennamen leicht auswählen/erzeugen können

Als Faustregel gilt: Wenn ich alle Spalten auswählen muss, würde ich "select *" verwenden, es sei denn, ich habe einen ganz bestimmten Grund, etwas anderes zu tun (und ich denke, dass dies bei Tabellen mit vielen, vielen Spalten schneller geht).

Und nicht zuletzt: Wie soll sich das Hinzufügen oder Löschen einer Spalte in der Tabelle auf Ihren Code oder dessen Wartung auswirken?

0voto

Jeff Hubbard Punkte 9684

Der Hauptunterschied zwischen den beiden besteht in der Menge der Daten, die hin- und hergeschickt werden. Jegliche Argumente bezüglich des Zeitunterschieds sind grundlegend falsch, da "select *" und "select col1, ..., colN" zur gleichen Menge an relativer Arbeit führen, die von der DB-Engine geleistet wird. Die Übertragung von 15 Spalten pro Zeile gegenüber 5 Spalten pro Zeile ist jedoch ein Unterschied von 10 Spalten.

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