phpbar.de logo

Mailinglisten-Archive

query optimieren

query optimieren

Wolfgang Hauck wbh at euta.net
Die Apr 1 18:25:38 CEST 2003


>[hasXX flag mitfuehren]
>an solch einer stelle koennte man  trigger gebrauchen. ;)
>Werd ich beim naechsten MYSLQ ist doof thread auf heise mal
>anfuehren ;)

Hi niko,

Sowas lässt sich sogar machen...
z.B. über nen Hintergrundprozess (datenbankgesteuert)

Ja das ist halt so ne Sache, Triggers bremsen die Datenbank auch...
Ich hab da z.B. so ein Löschweitergabescript geschrieben, dass mir 
dann einfach alle Referenzen raushaut wenn ein Hauptdatensatz 
gelöscht wurde (via cron). Das muss nicht mal so oft laufen, da ja 
die Datensätze deren Refrenzstamm weg ist sowieso nicht gezeigt 
werden.
Bei Triggers ist das freilich anders. Das könnte man z.B. über ne 
Zeitschleife laufen lassen (sleep()) um dann die Datenbankdateien 
nach ihrem Aktualisierungsdatum abzuscannen. Hat sich das geändert 
passt der Prozess den Mus entsprechend an. Hier wärs natürlich 
nützlich mit Timestamps (Auch für Updates!) zu arbeiten, denn sonst 
sucht der sich damisch... ;-). Du kannst natürlich auch die Anfrage - 
Log - Datei von mysql zu Rate ziehen (kostet aber auch Performance, 
ausserdem soll das Ganze die binary - Log ersetzen). Das grösste 
Problem sind aber die Löschungen, da ja hier wenns gelöscht ist auch 
kein timestamp mehr da ist ;-(. Da lässt sich dann ein Löschflag 
einsetzen, damit der Pseudotrigger das übernimmt, anderenfalls muss 
der sonst die ganzen Tabellen durchscannen. Theoretisch könnte das 
sogar völlig ohne Datenbankänderungen laufen (da würd sich bei deinen 
Ein- und Ausgabgeschichten garnichts ändern). Da du ja in deinem 
Falle keinen "Update - Trigger" bräuchtest (das Flag in der 
Hauptdatenbank bleibt ja beim Update unberührt), kannst du einen 
neuen DS erkennen, wenn die ID grösser ist als beim letzten scannen 
([autoincrement, versteht sich] musst du natürlich merken, am besten 
in ner Tabelle speichern). Löschen erkennst du nur an der Änderung 
des Dateiänderungsdatums. Da musst du halt mit nem Join die flags 
abfragen und entsprechend anpassen...
Tja, grad hab ich da deine letzte Mail gelesen, php ist da natürlich 
nicht besonders geeignet, sollte schon was kompiliertes sein und mit 
einer Zeitschleife versehen werden. Ob die Rückmeldung nun ein paar 
Sekunden länger dauert dürfte doch in deinem Fall keine Rolle 
spielen, ein Dauerscanner frisst natürlich ungemein. Zweitens 
solltest du erst dann eine Verbindung zur DB aufmachen (und danach 
auch wieder schliessen) wenn was zu tun ist, deshalb solltest du auch 
das Dateisystem bzw. die betroffenen Datenbankdateien über das 
Dateisystem scannen...
Das was für deinen Pseudotrigger zu tun ist muss als Initialisierung 
zuerst ausgelesen und im Speicher gehalten werden (sendmail, apache & 
Co. machen das auch so, deshalb mussen die Init - Dateien auch bei 
Änderung neu eigelesen bzw. neu gestartet werden)...
Genug gefraselt

MfG Wolfgang     

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive