Un po'ot ma penso che darà da discutere:
ho un database (mariadb) con una tavola con tanti (circa 30) campi e circa
500000 righe.
Mi interessano tre colonne: EI ET e ED (numerici)
ogni giorno, alle 3 del mattino, debbo effettuare la seguente operazione:
per ogni riga dove ED è diverso da zero e da null :
EI=EI+ED ;
se dopo la operazione EI è compreso tra +K e -K (costante nota) allora
EI=ET; ED=0 ;
Vincoli: la operazione non deve bloccare l'accesso al database almeno in
lettura
e durare il meno possibile;
il campo ED diverso da zero e da null dovrebbe essere presente solo in
circa 7000 record;
Esiste un comando sql che mi possa fare questo (la prima parte è facile,
con un semplice where ED,
ma la seconda un po'più difficile visto che dovrebbe scorrere una seconda
volta il DB.
Quale è il suggerimento più "efficiente"?
(oppure è meglio estrarre i record che hanno ED diverso da 0 e da null,
fare le operazioni da php o perl o anche C e e riscrivere i due valori in
blocco ? cosa costa meno ?)
(per inciso: sarebbe anche possibile aggiungere, solo la prima volta, un
qualcosa che se ED o EI sono null li inizializza a 0 e ET, ma preferirei
non farlo ...)
--
Leonardo Boselli
Dipartimento ingegneria Civile e Ambientale UNIFI
tel +39 0552758808