Webaholic - Blog


Weltfremd

Vor ca. einem dreiviertel Jahr meldete sich ein Kunde bei mir und bat mich ein Script seiner Webseite für Ihn zu optimieren. Dabei handelte es sich um ein Statistikscript - welches wohlgemerkt nicht von mir stammte.

Ok, ich habe mir also als erstes mal die Datenbank und das Script angeschaut. Und gelacht. Nein, nicht nur ein bisschen, wenn ich nicht zwischen Stuhllehne, Armlehne und Tisch eingeklemmt währe, hätte mich vermutlich nichts mehr auf dem Stuhl gehalten.


$res = mysql_db_query("$dbname" ,
"select * from tabelle where x=y");
$num = mysql_num_rows($res);

und das 41 mal! Achja und die (diversen) x’e hatten natürlich nicht mal einen Index.

Aber jetzt mal so, dass es auch ein nicht Progger versteht, also was ist passiert? (Ihr düft gerne nach Fehlern suchen, die Auflöung kommt dann am Ende)

X hätte gerne eine Statistik über Bücher der Bücherei Y.
Er geht deshalb zu Z und bittet ihn um eine Statistik.

Z überlegt sich folgende Werte für eine Statistik:

  • Anzahl der Autoren
  • Anzahl männlicher Autoren
  • Anzahl weiblicher Autoren
  • Anzahl der Bücher
  • Anzahl der Bücher von männlichen Autoren
  • Anzahl der Bücher von weiblichen Autoren
  • Anzahl der Romane

Soweit so gut - wie ermittelt man jetzt diese Werte?

Z geht bittet die Verkäuferin um eine Liste aller Autoren, auf der alles stehen soll, was es über die Autoren zu wissen gibt.
Die Liste ist durchnummeriert, er schaut also auf die Zahl am Ende der Liste und weiß nun, dass es insgesamt 2000 Autoren gibt. Dann wirft er die Liste weg.
Z bittet die Verkäuferin:

Könnten Sie mir bitte eine Liste aller männlicher Autoren - wieder mit allen Daten - geben?

Da die Datensätze im Computer nicht nach Geschlecht sortiert vorliegen, muss die Verkäuferin jeden Datansatz ansehen und nur die männlichen Autoren raussuchen.
Sie gibt ihm das gewünschte nach längerer Suche. Er sieht nun, dass es insgesamt 985 männliche Autoren gibt, das notiert er sich, wirft die Liste weg und bittet die Verkäuferin um dasselbe mit weiblichen Autoren. Nach einer ähnlich langen Zeit bringt die Verkäuferin ihm die Liste - er schaut wieder nur auf die letzte Zeile und notiert sich die Anzahl der weiblichen Autoren und wirft die Liste weg.

Genauso verfährt er mit den Büchern. Erst eine Liste aller Bücher mit allen Daten und dann eine Liste zu jedem bestimmten Thema. Jedesmal fragt er nach sämtlichen Daten zu jedem Buch.

Nachdem er nach sehr langer Zeit die Statistik fertig hat gibt er diese an X. Am nächsten Tag kommt Q vorbei und bitte um dieselbe Statistik - Z beginnt seine Arbeit von vorne.

– — –

Nun worin liegen hier die Fehler?

  • Autoren — er ist garnicht an einer Liste interessiert
  • auf der alles steht,… — das gleiche wie oben, die Einzeldaten interessieren ihn ja garnicht
  • Es gibt keinen Index über die Geschlechter der Autoren, obwohl diese Information offensichtlich häufig benötigt wird (ok, hier passt das Beispiel nicht perfekt)
  • Wenn man die Anzahl der Autoren und die Anzahl der männlichen Autoren weiß, muss man nicht nach den weiblichen Autoren fragen
  • Bei den Büchern wiederholen sich die Fehler nochmal
  • Die Statistik müsste nicht jeden Tag neu erstellt werden, bei ihr kann eine Gültigkeit von mindestens einer Woche — wenn nicht eines Monats — angenommen werden.

Alle Punkte bis auf den letzten habe ich damals geändert - wenn das alte Script heute ausgeführt wird, beendet es sich selbst nach 3 Minuten, da PHP auf diese Maximallaufzeit eingestellt ist. Das umgeänderte Script läuft in - immernoch für normale Seite eher inakzeptablen - 3 Sekunden, natürlich mit völlig akuratem Ergebnis im Gegensatz zu der Fehlermeldung, welche von dem 60x langsamerem Hirnlosscript ausgespuckt wird.

Dieser Artikel basiert auf meiner persönlichen Meinung. Nie mehr einen Artikel verpassen: RSS-Feed abonieren

5 Reaktionen zu “Weltfremd”

  1. Heiko

    Wenn Du diesen Post schon unter “Code Verbrechen” abgelegt hast, dann lege ihn doch auch bitte noch in die Kategorie “Rechtschreib Verbrechen”:
    1. In Deutschland heißt ein Verfasser immer noch Autor.
    2. Deppen-Leerzeichen sind auch falsch.

    Aber mit diesem “select * from” hast Du vollkommen Recht. Das ist kompett überflüssige Datenbankbelastung.

  2. Xel

    So dann hoffe ich mal deinem orthographischen Wohlbefinden nicht zu sehr geschadet zu haben und korregiere die Fehler, gleichwohl ich weiß, dass im restlichen Blog noch mehr als genug vorhanden sind, werde ich mich dort jetzt nicht auf Fehlersuche begeben.

    Was den Author [bzw. richtiger Autor] betrifft - tja… man merkt halt, dass ich in letzter Zeit zu viel Englisch lese… da schleicht sich sowas gerne mal ein…

    Was das “Deppen-Leerzeichen” betrifft… ich glaube es gefunden zu haben — wobei ich persönlich nicht der Meinung bin, dass dasselbe zusammen geschrieben werden sollte… schließlich handelt es sich hierbei eigentlich um zwei unterschiedliche Wörter, deren Verschmelzung eigentlich keinen Sinn ergibt. Außerdem müsste - sofern in dem Satz kein Subjektiv folgt “selbe” eigentlicht das Subjektiv ersetzen. Ähnlich wie in “Der Schnelle läuft allen anderen davon.” Man schreibt ja auch nicht “Da ist wieder derschnelle.” — während “Da ist wieder derselbe.” richtig währe. Totaler Humbug.

  3. torsten

    Das Script ist natürlich krass daneben, keine Frage. Wenn ich sowas in die Finger kriege seufze ich zweimal. Einmal, weil ich mich mit so etwas auseinandersetzen “darf” zum anderen weil ich froh darüber bin. Wenn jeder gleich alles richtig machen würde, dann bräuchte man meine Dienstleistungen nicht. Also, lieber an die Arbeit und freuen drüber :)

  4. Xel

    Ja klar - da hast du natürlich völlig recht - eigentlich sollte man froh darüber sein… ich kann nur einfach nicht nachvollziehen, wie es jemand moralisch vertreten kann sowas zu verkaufen…

  5. torsten

    Manche können nicht besser und verkaufen so etwas. Das klappt dann natürlich nur bei Kunden die überhaupt nicht in der Lage sind so etwas zu verstehen. Einfach besser machen. Guter Code ist nicht nur Ehrensache, er ist auch immer gute Werbung :)

Einen Kommentar schreiben

 

Kommentarbenachrichtigung aktivieren
ohne einen Kommentar zu hinterlassen.