11 messages in com.mysql.lists.mysql-deRe: SELECT alles ausser?| From | Sent On | Attachments |
|---|---|---|
| Michael Schoenboeck - domaintechnik.at | 14 Sep 2005 23:48 | |
| Georg Richter | 15 Sep 2005 00:33 | |
| Hagen Kuehnel | 15 Sep 2005 01:05 | |
| Rene Fertig | 15 Sep 2005 01:34 | |
| Sebastian Mendel | 15 Sep 2005 02:30 | |
| Hagen Kuehnel | 15 Sep 2005 04:14 | |
| Georg Richter | 15 Sep 2005 04:36 | |
| Sebastian Mendel | 15 Sep 2005 04:41 | |
| Hagen Kuehnel | 15 Sep 2005 05:05 | |
| Sebastian Mendel | 15 Sep 2005 05:14 | |
| Hagen Kuehnel | 15 Sep 2005 23:14 |
| Subject: | Re: SELECT alles ausser?![]() |
|---|---|
| From: | Sebastian Mendel (lis...@sebastianmendel.de) |
| Date: | 09/15/2005 05:14:55 AM |
| List: | com.mysql.lists.mysql-de |
Georg Richter wrote:
b) unleserlich, da niemand weiss, was aus der Tabelle eigentlich angezogen wird, und man sich zusätzlich das Tabellendesign anschauen muss.
das muss man sich so oder so anschauen wenn man an dem Query oder der Verarbeitung etwas ändern will, denn auch wenn ich alle Spalten aufzähle im Query, muss ich in das Tabellen-Design schauen wenn ich weitere Daten aus der Tabelle benötige!
Wenn Du einen fremden Code (oder auch Deinen eigenen Code nach 2 Jahren) anschauen oder ändern musst, dann sagt Dir ein SELECT mit Feldnamen wesentlich mehr, als ein simples SELECT *. Oder kannst Du mir sagen welche Felder bei einem SELECT * FROM DDNTF angezogen werden?
zumindest bei mir heißen keine Tabellen `DDNTF` und auch nicht so ähnlich ... ;-)
und wenn gibt es ja immer noch den DocBlock vor der Abfrage und 'AS `lesbarer_Tabellenname`'
c) Schwer wartbar, wenn sich die Reihenfolge der Felder in der Tabellendefinition ändert.
Das hängt ja wohl eindeutig von der verwendeten Middleware ab, bzw in welcher Umgebung du das verwendest.
Wer natürlich wie in PHP möglich, assoziative Feldnamen verwendet, hat einen etwas lesbareren Code - allerdings auf Kosten von Performance.
die zumindest laut PHP Handbuch vernachlässigbar sind
d) Du läufst Gefahr Tabellenspalten anzuziehen, die Du gar nicht benötigst und verbrauchst damit unnötig Resourcen.
man muss natürlich Wissen ob man alle Felder benötigt oder nicht ...
Eben - und sobald Dein Kollege entscheidet, dass er für einen bestimmten Fall an einer Stelle eine neue Spalte benötigt, änderst Du den ganzen Code (sofern Du die Änderung mitbekommst) ?!.
Mein Kollege? ;-)
außerdem:
'SELECT *' ist außerdem schneller als ein 'SELECT [aufzählen aller Felder]'
kürzere Abfrage und die Spalten können so zurückgegeben werden wie sie vorliegen d.h. keine umordnen und die Daten können in einem Rutsch gelesen werden
Das Parsing ist schneller aber vernachlässigbar. MyISAM liest ohnehin die komplette Row - bei InnoDB sollten das nichts ausmachen, da die Pages ohnehin gebuffert sein sollten.
na gut,
Ich verwende aber SELECT * auch an stellen wo ich nicht 100% sagen kann was letzten Endes alles von der Tabelle benötigt wird, z. B. stellt der Controller die Daten dem Viewer zur Verfügung, ohne vorher zu wissen ob der Viewer wirklich immer alle Daten benötigt - da wäre der Code-Mehraufwand an Implementierung und Pflege nicht gerechtfertigt für die eventuell verbesserte Performance der Abfrage.
Der Code bleibt flexibler, aber Flexibilität geht ja fast immer einher mit etwas Performanceverlust.
Ansonsten würde ich Punkto Übersichtlichkeit natürlich nicht bestreiten das die Aufzählung der einzelnen Spalten besser ist.
-- Sebastian Mendel
www.sebastianmendel.de www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet




