Hi!
Zumindest die Begründung war mir nicht stichhaltig und vor allem nicht neutral/ausgewogen genug.
Das leuchtet mir wirklich nicht ein.
Nun, dann muss ich vermutlich meine Fähigkeiten im Rüberbringen der Gegenargumente verbessern. Ich habe in seinen Aussagen eine deutlich ablehnende Argumentation herausgelesen.
Wenn er sagt, dass man in den seltesten Fällen alle Felder braucht, ist das nicht ausgewogen und neutral?
Ist es nicht, weil ich es so extremisiert nicht als richtig erachte. "Seltenst" wäre für mich irgendwo bei 99%. Vielleicht sind meine Datenmodelle auch besser angelegt, so dass ich auch bei einem SELECT * nicht viel überflüssiges bekomme.
Und das man bei Aggregatsfunktionen "Spaß" hat, ist vielleicht nicht stichhaltig, aber als Hinweis durchaus sinnvoll, da keiner weiß wie der OP diese Funktion nutzt.
Bei SQL-DBMSen außer MySQL kann man bei Gruppierungen nur die gruppierten Felder direkt verwenden. Andere anzugeben erzeugt eine Fehlermeldung. Bei MySQL kann man alle Felder unabhängig von einer Gruppierung wählen. Eine separate Aufzählung von Feldnamen verhindert die damit verbundene Problematik nicht, weswegen eine SELECT-*-Vermeidung in dem Fall nicht automatisch zum Problemlöser wird. (Ein Problem ist das auch nur, wenn man sich der Auswirkungen nicht bewusst ist.)
Und ich behaupte mal: Ein SELECT * verursacht mehr Diskussionen als wirkliche Probleme.
Aber entnehme ich dem, dass du dazu rätst allgemein ein SELECT * zu verwenden, weil nichts dagegen spricht?
Nein. Ich rate dazu, anwendungsfallabhängig über eine Verwendung von bestimmten Dingen zu entscheiden. Dazu muss man die Auswirkungen kennen und nicht nur irgendwelche verallgemeinerten Thesen, die man noch dazu nicht hinterfragt hat. Nur so kann man Vorteile und Nachteile für eben diesen Fall optimal einschätzen.
Ausserdem sprichst du in deiner Antwort ständig von Verteufelung, obwohl EKKI genau das nicht getan hat.
Wie gesagt, entnahm ich eine ablehnende Grundstimmung. Und da Ablehnungen auch anderswo zu häufig und oftmals unbegründet zu lesen sind, war ich hier möglicherweise etwas ungerecht ihm gegenüber. Es geht mir aber nicht nur speziell um ihn, sondern ich hoffe, dass weitere Mitleser sich mit der Sache beschäftigen und ihre gelernten Thesen darüber überdenken.
Ich bin ja auch kein DB Profi, aber ich empfand den Hinweis von EKKI hilfreich und nachvollziehbar, weil in fast jeder Tabelle Felder stecken, die nicht bei jeder Abbfrage nötig sind und gerade bei joins sind das dann mehrere, die oft auch noch die gleichen Namen tragen (wie z.b. das last_change oder is_deleted).
"In fast jeder Tabelle" ist auch so eine allgemeine und schwer zu be- und widerlegende Annahme. Irgendwelche Thesen und Annahmen allgemeiner Art entbinden meiner Meinung nach jedenfalls nicht von einer individuellen Betrachtung jedes Einzelfalls, wenn man optimale Ergebnisse auf effiziente Weise bekommen möchte.
Das das (heutzutage) nicht unbedingt der Performancekiller ist, ist klar, diese sollte man sich über EXPLAIN o.ä. suchen, aber es war ja auch keine Performancefrage.
Ja, es war keine Performancefrage (im OP), weswegen man eigentlich auch nicht mit Performance-Erwägungen argumentieren muss. Er hat jedoch die Belastung des Servers angesprochen und ich bin darauf eingegangen.
Mich hat eher dein Einwurf verwirrt, weil ich dich als DB Fachmann kenne, aber ich konnte deine Einwände nicht nachvollziehen. Da deine Argumentation:
Wenn man bestimmte Information "seltenst" benötigt, warum belastet man dann das DBMS mit ihrer Speicherung..
Das entspricht zumindest bei mir in den seltesten Fällen der Realität, natürlich sind in den Tabellen Informationen die nur für bestimmte Dinge nötig sind und seltenst beim Client benötigt werden.
Ich bin auf die meiner Meinung nach nicht gerechtfertigte, weil nicht belegbare Verwendung des Superlativs angesprungen. Solche Annahmen führen gern zu einer Regel, die einem das Nachdenken über individuelle Fälle ersparen soll. Die Anwendung solcher Regeln führt aber nicht zwangsläufig zu einem optimalen Ergebnis, weil sie nicht unbedingt den speziell vorliegenden Fall optimal berücksichtigt hat.
Insofern kann ich auch nicht deinen Vorwurf nachvollziehen.
Es war an dieser Stelle nur noch eine Aussage allgemeiner Art, kein Vorwurf. Der eigentliche Vorwurf kam schon eher und bezog sich auf die Einseitigkeit und unnötige Extremisierung seiner Argumentation.
Nochmal: genau das hat er nicht getan. Die Argumentation war weder einseitig noch extrem, im gegenteil.
Der Meinung war ich nicht. "Seltenst" ist für mich ein Extrem. Und er hat keine Argeumente für SELECT * gebracht, was dann für mich einseitig genug ist. Zugegeben, so viele kenne ich nicht. Das einzige Argument für SELECT *, das mir einfällt, ist, es genau dann anzuwenden, wenn man seine Funktionalität benötigt. Es werden aber viele Argumente dagegen genannt, die in ihrer Pauschalität nicht immer dem konkreten Fall angemessen sind. Dewegen plädiere ich für Einzelfallbetrachtungen und Hintergrundwissenerwerb statt Thesen und schneller Verallgemeinerungen.
Lo!