In Anbetracht Ihrer Spezifikation , dass Sie werden alle Spalten der Auswahl gibt es kaum einen Unterschied zu diesem Zeitpunkt . Beachten Sie jedoch, dass sich Datenbankschemata ändern. Wenn Sie verwenden SELECT *
, werden der Tabelle neue Spalten hinzugefügt, obwohl Ihr Code aller Wahrscheinlichkeit nach nicht bereit ist, diese neuen Daten zu verwenden oder zu präsentieren. Dies bedeutet, dass Sie Ihr System unerwarteten Leistungs- und Funktionsänderungen aussetzen.
Sie sind möglicherweise bereit, dies als geringfügige Kosten abzutun, stellen jedoch fest, dass Spalten, die Sie noch nicht benötigen, Folgendes sein müssen:
- Aus Datenbank lesen
- Über das Netzwerk gesendet
- Marshalled in Ihren Prozess
- (für ADO-Technologien) In einer Datentabelle im Speicher gespeichert
- Ignoriert und weggeworfen / Müll gesammelt
Artikel 1 hat viele versteckte Kosten, einschließlich der Eliminierung eines potenziellen Deckungsindex, der das Laden von Datenseiten (und das Thrashing des Server-Cache) und das Sperren von Zeilen / Seiten / Tabellen verursacht, die andernfalls vermieden werden könnten.
Vergleichen Sie dies mit den potenziellen Einsparungen bei der Angabe der Spalten im Vergleich zu an. *
Die einzigen potenziellen Einsparungen sind:
- Der Programmierer muss SQL nicht erneut aufrufen, um Spalten hinzuzufügen
- Der Netzwerktransport des SQL ist kleiner / schneller
- Analyse- / Validierungszeit für SQL Server-Abfragen
- SQL Server-Abfrageplan-Cache
Für Punkt 1 ist die Realität, dass Sie Code hinzufügen / ändern, um jede neue Spalte zu verwenden, die Sie ohnehin hinzufügen könnten. Es handelt sich also um eine Wäsche.
Bei Punkt 2 reicht der Unterschied selten aus, um Sie in eine andere Paketgröße oder Anzahl von Netzwerkpaketen zu verschieben. Wenn Sie an einem Punkt angelangt sind, an dem die Übertragungszeit von SQL-Anweisungen das vorherrschende Problem ist, müssen Sie wahrscheinlich zuerst die Rate der Anweisungen reduzieren.
Für Punkt 3 gibt es KEINE Einsparungen, da die Erweiterung *
ohnehin erfolgen muss, was bedeutet, dass das Schema der Tabelle (n) trotzdem konsultiert wird. Realistisch gesehen verursacht das Auflisten der Spalten die gleichen Kosten, da sie anhand des Schemas validiert werden müssen. Mit anderen Worten, dies ist eine vollständige Wäsche.
Wenn Sie für Punkt 4 bestimmte Spalten angeben, wird der Abfrageplan-Cache möglicherweise größer, jedoch nur, wenn Sie mit verschiedenen Spaltengruppen arbeiten (was nicht von Ihnen angegeben wurde). In diesem Fall möchten Sie unterschiedliche Cache-Einträge, da Sie nach Bedarf unterschiedliche Pläne wünschen.
Dies alles hängt aufgrund der Art und Weise, wie Sie die Frage angegeben haben, von der Ausfallsicherheit des Problems angesichts eventueller Schemaänderungen ab. Wenn Sie dieses Schema in ein ROM brennen (es passiert), ist ein *
durchaus akzeptabel.
Meine allgemeine Richtlinie lautet jedoch, dass Sie nur die Spalten auswählen sollten, die Sie benötigen. Dies bedeutet, dass es manchmal so aussieht, als würden Sie nach allen fragen. DBAs und die Schemaentwicklung bedeuten jedoch, dass möglicherweise einige neue Spalten angezeigt werden, die die Abfrage stark beeinflussen können .
Mein Rat ist, dass Sie IMMER bestimmte Spalten AUSWÄHLEN sollten . Denken Sie daran, dass Sie immer wieder gut darin sind, was Sie tun. Gewöhnen Sie sich also einfach an, es richtig zu machen.
Wenn Sie sich fragen, warum sich ein Schema möglicherweise ändert, ohne dass sich der Code ändert, denken Sie an die Überwachungsprotokollierung, die Gültigkeits- / Ablaufdaten und andere ähnliche Dinge, die von DBAs systematisch für Compliance-Probleme hinzugefügt werden. Eine weitere Ursache für hinterhältige Änderungen sind Denormalisierungen für die Leistung an anderer Stelle im System oder in benutzerdefinierten Feldern.