just another MySQL Thread | select * from … | Queries optimieren, Stilfrage

Wie selektierst du bei einer einfach strukturierten MySQL Datenbank wenige Variablen?

  • a) select from * (Ich selektiere alles, auch wenn ich nur 3 Vars brauche)

    Stimmen: 1 16,7%
  • b) select from var1,var2,var3 (Ich selektiere trotz der Einfachheit der DB aus Prinzip nur das was

    Stimmen: 5 83,3%

  • Umfrageteilnehmer
    6
S

sevY

just another MySQL Thread | select * from … | Queries optimieren, Stilfrage…

Hi zusammen, ich wollte einfach mal fragen wie ihr folgendes handhabt.


Ein Table mit durchschnittlich 12 Variablen, max. ca. 10 Rows. Für MySQL also ein Witz was die Querytime angeht :D. Trotzdem nun meine Frage:

Ihr benötigt aus diesem Table von den 12 Variablen bei eurer Abfrage nur 4 Variablen.

Was macht ihr?

a) mysql_query("select * from …

Also alles auswählen…

b) mysql_query("select var1,var2,var3,var4 from …

Ausschließlich die Variablen die ihr benötigt selektieren.


Für a) spricht, das bei dieser „winzigen“ Datenbankstruktur praktisch keine Nachteil entstehen, alles zu selektieren. Außerdem ist es einfacher und bei ca. 8 selektierten Variablen auch übersichtlicher, diese durch * zu ersetzen.

Für b) spricht meines Erachtens nur die Tatsache, das es „korrekter“ ist, nur das zu selecten was man braucht.

Nachdem ich etliche Vorträge über korrektes ER-Design von DBs und sauberen PHP-Code (hier ein Leerzeichen, da keins, hier einrücken, da nicht…) gehört habe, möchte ich mir von vornherein einen sauberen Stil angewöhnen.


Ist nun a) völlig ok oder doch b) die sauberste Lösung bzw. relevant für einen guten PHP Stil?


Yves
 
grundsätzlich gilt, projektionen und selektionen immer so weit wie möglich in die joins ziehen. dadruch werden die zwischen ergebnisse der joins kleiner und die db rödelt dementsprechend weniger. nun stell die mal das kartesische produkt von spalte1 x spalte2 x spalte3 x ... vor. das zwischen ergebnis wird riesig sein. das auch schon bei kleinen mengen. machst du nun tablelle a x tabelle b und du machst select *, bildest du nen kartesiches produkt über jede möglichen kombinationen. sowas ist unfug.

also überleg nochmal ;)
 
Original geschrieben von minimal
machst du nun tablelle a x tabelle b und du machst select *, bildest du nen kartesiches produkt über jede möglichen kombinationen. sowas ist unfug.
 

Hi,

bedeutet das, select * zu nehmen ist in jedem Fall Unfug solange nicht auch alles benötigt wird?

Bei der Abfrage eines(!) einzelnen Tables wird meines Wissens nach doch ein kartesisches Produkt aus xVarname und yRowContentzuX gebildet.
Die kartesischen Produkte der nicht genutzen, gebildeten Arrays sind hier irrelevant aber durchaus nicht unsinnig im eigentlichen Sinne.

//offtopic… ich wusste gar nicht, das du neben cooler Musik auch was mit DBs zu tun hast :)

Yves
 
infos allgemein zum thema optimieren von mysql abfragen:

http://www.mysql.de/doc/de/MySQL_Optimisation.html

ob ein selecct * in deinem fall performance nachteile oder vorteile gegenüber einem expliziten ansprechen der einzelnen spalten bringt lässt sich schwer sagen und dürfte eher akademisch sein. ändert sich denn der inhalt der tabelle bei jeder abfrage, oder greift hier möglicherweise eh der cache?

gruss
lemonstre
 
Zuletzt bearbeitet von einem Moderator:
wenn du kein join machst also nur eine tabelle hast ist das killefit. aber sobald du was machst wie, select * from a, b .... wirds kritisch und kann auf lang oder kurz die kosten der db durch unnötig vielen datenbank zugriffen erhöhen und natürlich die performance senken.

ich studiere ja noch informatik ;)
 
wunderbar :) danke für die infos. ich denke das ich mir es angewöhne, direkt nur das zu selecten, was benötigt wird.


yves
 
genau, * is evil ;)
 
Zurück
Oben Unten