Du kannst die Rechte auch Schritt für Schritt einrichten, z. B. immer nur ein recht für alle Kategorien. So dauert es zwar länger, aber die Chance, dass es nicht klappt, ist geringer.
Moin Xmurrix,
genau dieses Verhalten kann man aber auch mit dem Programm nachahmen, indem man bei dieser Funktion nach einer bestimmten Anzahl Statements an die DB eine Pause einbaut, also große Überarbeitungen in kleiner Pakete unterteilt und der DB damit die Möglichkeit gibt, andere Arbeiten zu erledigen.
Nach außen hin tut sich dann zwar lange nichts (hier wäre ein Ajax-Fortschrittsbalken beruhigend für den User), aber im Hintergrund wird die DB geschont.
Vom Laufzeitverhalten kommen mySQL DBs auch viel besser mit sehr kurzen und einfachen SQL Anweisungen zurecht als mit komplexen langen SQL die "alle Fliegen mit einer Klappe schlagen".
Da bremst sich die DB selbst aus, weil der zugesichterte DB-RAM oft nicht reicht, um die Zwischentabellen darin abzulegen und dann gehts auf die Platte und wird sehr laaaangsaaahm...
Im Zweifel würde ich dann lieber eine temporäre Zwischentabelle erzeugen mit einer kurzen Abfrage, die dann wiederum durch die nächste kurze SQL Abfrage ausgewertet wird.
So packte ich auch mal ein Paket, das über 40.000 Datensätze aus einer Tabelle überarbeiten sollte, die wiederum je 500 Datensätze enthielten, also 20 Millionen Daten in einer SQL-Anweisung betroffen waren.
Gerade mit PHP könnte man ja bei solchen kaskadierenden Effekten gegensteuern und die Funktion intelligenter bauen.
Macht auch noch Sinn in 4.8, denn die wird für immer größere Projekte benützt, bzw. diese Projekte wachsen mit der Zeit.
VG,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.