Datenbankabfrage mit Select
Montag, 02. September 2002 15:52
Bei der SQL-Anweisung SELECT * FROM ... muß das Datenbank-Management-System (DBMS) alle Spalten der betreffenden Datensätze selektieren, auch wenn in der anschließenden Verarbeitung nur ein Teil davon wirklich gebraucht wird. Das ist langsam und schlicht und einfach unsinnig, und die unnötigen Spalten verhindern unter Umständen, daß der integrierte Optimizer die Query effizient ausführen kann.
Selbst wenn alle Spalten tatsächlich benötigt werden, sollten sie separat aufgeführt werden, weil
die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden
die Reihenfolge der Spalten bei der Ausgabe sonst undefiniert ist (bei den meisten Datenbanken ist es die Reihenfolge der Spaltendefinition bei der Anlage der Tabelle). Diese Reihenfolge könnte sich ändern (z.B. durch Einspielen eines Backups nach Erweiterung der Tabelle, durch eine neue Version des DBMS, etc.)
die Spalten sonst möglicherweise keinen vernünftigen oder eindeutigen Namen haben - führt man die Spalten einzeln an, kann man mittels AS einen Namen (Alias) vergeben: SELECT p.pers_p_nr AS personalnummer FROM personal p
dadurch im Script quasi automatisch dokumentiert wird, welche Spalten anschließend verarbeitet werden
Selbst wenn alle Spalten tatsächlich benötigt werden, sollten sie separat aufgeführt werden, weil
die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden
die Reihenfolge der Spalten bei der Ausgabe sonst undefiniert ist (bei den meisten Datenbanken ist es die Reihenfolge der Spaltendefinition bei der Anlage der Tabelle). Diese Reihenfolge könnte sich ändern (z.B. durch Einspielen eines Backups nach Erweiterung der Tabelle, durch eine neue Version des DBMS, etc.)
die Spalten sonst möglicherweise keinen vernünftigen oder eindeutigen Namen haben - führt man die Spalten einzeln an, kann man mittels AS einen Namen (Alias) vergeben: SELECT p.pers_p_nr AS personalnummer FROM personal p
dadurch im Script quasi automatisch dokumentiert wird, welche Spalten anschließend verarbeitet werden