Immer wieder liest man, ein simples SELECT * FROM ... sei böse und soll nicht verwendet werden. Doch warum ist das so?
1. Eine detaillierte Auflistung aller zu selektierenden Spalten ist faktisch gleichzeitig eine Dokumentation dessen, was der SELECT-Befehl zu liefern hat
2. wird damit expliziet die Reihenfolge der Spalten im Resultset definiert. Eine Änderung einer Tabelle via ALTER TABLE kann die physische Reihenfolge der Spalten ändern - und damit auch im Resultset von SELECT *
3. kann der Planner besser planen, was genau zu tun ist.
4. ganz wichtig: falls später die Tabelle um weitere Felder erweitert wird, im worst case um große TEXT oder BYTA-Felder mit großen Datenmengen (binäre Bilder z.B.), würde ein SELECT * unnötig große Datenmengen liefern, die der Client gar nicht braucht. Das SELECT * wurde ja eher geschrieben, das nun gelieferte Bild (als Beispiel) wird gar nicht gebraucht
5. Ist das Select ein JOIN über 2 oder mehr Tabellen, und eine oder mehrere dieser Tabellen werden später um neue Spalten ergänzt, kann es zu undefinierten Spaltenamen kommen:
Also: in produktiven Code hat ein SELECT * nix zu suchen, und auch ein INSERT INTO ... VALUES () ohne Spaltendefinition ist falsch. In JOINS sind vollständige Spaltennamen zu verwenden!Code:test=*# select a.id, a.name, c.* from account a left join client c on a.id=c.id where ts > '2010-01-01'::timestamp; id | name | id | name ----+------+----+------ (0 Zeilen) Zeit: 0,369 ms test=*# alter table client add column ts timestamp; ALTER TABLE Zeit: 0,526 ms test=*# select a.id, a.name, c.* from account a left join client c on a.id=c.id where ts > '2010-01-01'::timestamp; ERROR: column reference "ts" is ambiguous ZEILE 1: ...m account a left join client c on a.id=c.id where ts > '2010... ^ test=!#
Andreas
Geändert von Xandrian (28.03.2010 um 17:05 Uhr)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen