[MySQL] Sternchen Query

emptynick

Erfahrenes Mitglied
Hallo,

ist es richtig, dass es ein Todsünde ist, ein Sternchen in einer SELECT Anweisung zu benutzen?
Also zum Beispiel:
Code:
SELECT * FROM tabelle
Ich habe "gehört", dass das für spätere Leute, welche den Code übernehmen schwierig wird, wenn die die Tabellenstruktur ändern.

Mir ist zwar leider genau das Gegenteil beim drüber nachdenken eingefallen,
aber ich lasse mich auch gerne eines besserem belehren ;)

LG
emptynick
 
nicht nur, weil sie aus dem code nichtmer genau sehen können bzw. den ganzen code prüfen müssen welche variablen benutzt werden. auch verbraucht es traffik, auch wenn es nur ein feld ist welches nicht gebraucht wird. das summiert sich!
 
Hallo!

Nun, die Abfrage alleine bringt ja nicht viel..... die Daten müssen ja auch irgendwie weiter verarbeitet werden.

Nehmen wir mal als Beispiel PHP:
mysql_fetch_assoc() --> $row['Spaltenname']
mysql_fetch_object() --> $row->Spaltenname
mysql_fetch_array() --> $row['Spaltenname'] oder $row[Spaltennummer]

Solange also nicht mit mysql_fetch_array() und der Spaltennummer gearbeitet wird, muss der gesammte Code bei einer Änderung der Tabellenstruktur überarbeitet werden.
Egal ob beim SELECT nun mit dem Sternchen oder explizit mit den Spaltennamen abgefragt wird.

Wenn mit mysql_fetch_array() und der Spaltennummer gearbeitet wird, dann muss der gesammte Code nur dann überarbeitet werden wenn sich die Spaltenreihenfolge und/oder Spaltenanzahl ändert.
Jedoch können die Spaltennamen, sofern der eigentliche Zweck erhalten bleibt, beliebig umbenannt werden.

Was die Änderung der Tabellenstruktur betrifft, macht es also kaum einen Unterschied ob man nun mit Sternchen oder den Spaltennamen arbeitet.
Der Aufwand ist mehr oder weniger der gleiche.

Um zum erstellen der Tabelle nicht erstmal den ganzen Code studieren zu müssen, ist es anzuraten einen SQL-Dump mitzuliefern.

Ich habe es mir angewöhnt je nach grösse des Codes den Datenbanknamen, den Tabellennamen sowie die Zugangsdaten zur Datenbank am anfang des Scripts bzw. in einer Konfigurationsdatei als Variablen anzulegen.
Das ist meiner Meinung nach genug Flexibilität.

Was die Performance betrifft, spielen hier noch andere Faktoren eine Rolle.
Beispiel:
Es gibt die Spalten ID, Benutzername, Passwort und e-Mail Adresse.
Ob hier beim Login nun nur die ersten 3 Spalten oder alle 4 abgefragt werden, dürfte aufgrund der geringen Datenmenge wohl eher nur eine untergeordnete Rolle spielen.
Wenn in den Spalten aber z.B. Bilder :eek: und viel Text gespeichert ist, wäre es anzuraten bei der Abfrage explizit die Spaltennamen anzugeben, von denen man das Ergebnis braucht.

Hinzu kommen ausserdem noch Faktoren wie z.B. die Leistung des Servers und die Anzahl gleichzeitig stattfindender Zugriffe.

Was den Traffic betrifft:
Unnötiger Traffic ensteht nur wenn es ein externer Datenbankserver ist.
Beispiel:
Ein Webserver schickt seine Abfrage an den externen Datenbankserver (dieser Traffic entsteht so oder so).
Wird die Abfrage nun mit einem Sternchen gemacht, werden weniger Daten übertragen als wenn man den/die Spaltennamen angibt (ein Sternchen spart hier also Traffic :p ).
Der Datenbankserver schickt nun das Abfrageergebnis zurück an den Webserver (erst hier ensteht unnötiger Traffic, wenn sich in dem Abfrageergebnis Daten befinden die eigentlich nicht benötigt werden).
Bei "extern" gibt es nun 2 Möglichkeiten:
1. MySQL läuft zwar auf einem andern Server, aber innerhalb des gleichen Netzwerks.
Hier dürfte kein Traffic berechnet werden.
Und wenn doch, dann gehört der Betreiber an die Wand gestellt. :D
2. MySQL läuft auf einem anderen Server und in einem anderen Netzwerk (irgendwo in den Weiten des WWW ;) ).
Hier kann (zu recht) Traffic berechnet werden, sofern man nicht einen Festpreis hat oder der üblicherweise vorhandene Freitraffic überschritten ist.

.....so, ich höre erstmal auf. ;)

Gruss Dr Dau
 
Also kann man kurz und knapp feststellen, dass es Blödsinn ist, zu sagen, dass ein Sternchen Query im Zusammenhang mit den meisten (bzw. allen) Spalten und dem Bezeichner in der Benutzung ein Anfänger-Fehler wäre!?

Schön dass wir das auch geklärt haben...
Ich dachte schon, ich hätte einen Denkfehler.

Zu dem mit der Flexibilität:
Genauso mache ich das auch ;)

LG emptynick
 
Es mag ja sein dass die nennung der Spaltennamen einen Geschwindigkeitsvorteil bringt, aber der dürfte (wenn überhaupt) nur im Millisekundenbereich liegen.
Zumindest bei einer Abfrage über alle Spalten.
Wenn man dann noch berücksichtigt dass eine Abfrage (wenn es immer die gleiche ist) NIE gleich schnell ist, ist es definitiv Jacke wie Hose. ;)

Einen Performance/Trafficgewinn bekommt man also nur unter Berücksichtigung der Gesamtumstände.
Oder anders ausgedrückt: eine pauschale Aussage was nun besser ist, lässt sich nicht treffen.
 

Neue Beiträge

Zurück