Jörg: Flaschenhals bei Query finden (mysql(i))

Beitrag lesen

Hallo Rolf,

Wenn Du keine Chance hast, die DB umzustrukturieren, dann... tja. Verbuche es unter "Data modeling - lessons learned". Es lohnt sich immer, über jedes Attribut in einer DB nachzudenken, ob es in der richtigen Relation ist.

Sehe ich genauso. Was mich ein bisschen ärgert, ist, dass diese DB-Struktur erst wenige jahre alt ist, d.h. ich hätte das zu diesem Zeitpunkt schon besser wissen sollen. Ich kann nur vermuten, dass ich mir dabei etwas gedacht habe. Aber ich habe es nicht dokumentiert.

Naja, eigentlich benötige ich nur die Info, ob wenigstens 1 x eine 1 in der Spalte steht. Normalerweise sollte auch die Eingabe neuer Zahlungen gesperrt sein, sobald in dieser Spalte eine 1 steht.

Dann könnte man ja einen SELECT MAX(bezahlt) machen.

Aber wenn Du es im Programm so löst, dass in dem Moment, wo genug Zahlungen eingegangen sind um den Rechnungsbetrag zu erfüllen, in allen Zahlungseingängen zur Rechnung die bezahtl-Spalte auf 1 gesetzt wird, kannst Du auch meinen LIMIT 1 Vorschlag nehmen. Wenn in Raten gezahlt wurde, ist der schneller. Mit MAX(bezahlt) müssen auf jeden Fall alle Sätze gelesen werden.

Das halte ich für eine gute Idee. Muss zwar mal darüber nachdenken, ob ich eine Historie benötige, ab wann die RG vollständig bezahlt war, aber vermutlich ist die entbehrlich. Und dass das nicht automatisch, sondern per Usereingabe auf bezahlt umgestellt werden soll, tut ja auchnnichts zur Sache bzgl. der Idee selber.

Aber grundsätzlich ist jede Query, die länger als 1s läuft, für ein Onlinesystem viel zu langsam. Meine ich.

Habe aber mal neue messungen gemacht und die Query liegt jetzt bei ca. 1 Sekunde. Heißt, es ist schon viel erreicht.

Leider dauert die Seite selber immer noch bis zu 10 Sekunden, was natürlich ein Unding ist. Es werden 50 RGs per Seite angezeigt und jeder Durchlauf der while-Schleife aus der Ergebnismange der Query braucht 0.15 bis 0.20 Sekunden. Ich frage mich allen Ernstes, wie ich da auf Werte unter 0.1 kommen soll. Ich mache halt mit jedem Datensatz noch ein paar Klimmzüge vor der Ausgabe. Ich fürchte, ich muss hier die Dynamik herausnehmen und einige Dinge statisch ablegen, damit sich diese Durchlaufzeiten nicht so horrend summieren.

Oder hast Du hierfür eine andere gute Idee?

Jörg