Code heeft altijd het nadeel van connecties opbouwen en het "niet" kunnen uitvoeren van set-based structuren.
Stel dat het versturen van 1 query vanuit php naar mysql 1 ms duurt. Als je dan je 29k records per record gaat query'en (1 select en 1 update per record, worst case) dan zit je dus al minimaal aan 58000 ms. En dat is 58 seconden aan enkel overhead, terwijl je met 2 query's dan maar aan 2 ms aan overhead zit.
Wil je toch dingen als sleep etc erin bouwen dan alsnog niet alle data overhalen naar php maar bijv je max rowcount delen door 10 (of een andere simpele methode om een ongeveer evenwichtig aantal rows te bewerken) en dan daar de pk's van opvragen. Zodat je in je update query's kan meegeven where pk<x and pk>y (ik weet zo snel niet of mysql ook limits op update-query's accepteert)
Dan doe je het alsnog in een stuk of 30 query's ipv 58.000.
En stel dat je toch een heel erg ingewikkeld iets moet doen wat echt in code moet dan kan je alle rows ophalen en dan de update-query in code opbouwen en per 10.000 oid naar de mysql-server sturen (dat scheelt weer 9999 keer overhead)
En algemene tip : Zet bij een update query altijd een where-conditie als je niet alles wilt aanpassen, in het ergste geval haalt de query-optimizer de where weg en in het beste geval is je query tig keer sneller (plus dat je je query dan in 2 sec kan checken door er een select-query van te maken)
P.s. in je laatste query zou ik persoonlijk nog even een check doen om te zien of er niet nog iets is wat : like *<p * bevat, want je pakt nu echt enkel maar 1 specifiek randgeval.
Dadona schreef op zondag 21 oktober 2012 @ 14:53:
[...]
Mwa, het tegenovergestelde kan ik ook wel zeggen. Grappig dat het ontwikkelaars totaal niet boeit dat iets wat meer geheugen of wat meer opslagruimte kost, toch zat. En opeens zit je met een 'kale' printer / bluetooth driver van 300MB.
Maar goed, inderdaad moet je altijd gewoon even afwegen of het echt relevant is. In dit geval voldoet inderdaad alles wel.
Let er wel op dat het hier om eenmalige / admin acties gaat. Die dingen horen niet in een 'kale' printer/bluetooth driver te zitten.